2017-06-17 89 views
0

我试图用KnownFolders,即完成以下任务:在我UWP应用UWP KnownFolder数据缓存

  1. 更快负载时间VideoLibrary。 (我需要从KnownFolders加载缩略图和文件名,如果库的文件数量很大,可能会花费更多的时间。是否有更快的方式来缓存和存储它们,可能在sqlite数据库中,并且每次下一次运行从数据库获取它们,可以更快吗?

  2. 与系统文件更改同步(如果在特定库中添加或删除新文件,而应用程序正在运行,应用程序如何通知有关内容)

  3. 基本上我想要的应用程序,因为它打开,这样会产生什么推荐的方式来实现这一目标加载库数据的速度更快?我应该使用后台任务的应用程序吗?但在内存中保存数据时,应用心不是运行可能不是一个好的解决方案还是它?或者我可以在应用启动后立即开始在App.xaml.cs中提取数据的过程(在导航到库页面之前)是否会提高性能?

  4. 基本上我在这里寻找一些建议和讨论,因为在这里我的问题可能没有严格的答案。 在此先感谢任何建议将不胜感激。我主要的两个目标是将库与删除同步,并在物理文件夹中添加文件,并提高应用程序中库的加载性能。 (和是啊,我加载库在GridView缩略图为好。

+0

这是关于使用[搜索索引器](https://msdn.microsoft.com/en-us/magazine/mt620012.aspx?f=255&MSPPError=-2147217396)的文章。索引是操作系统提供的加速枚举大量文件的操作。在文章中搜索示例“用于枚举库的优化代码”以开始。 – kennyzx

+0

那真是太棒了,非常感谢@kennyzx – touseef

回答

1
StorageFileQueryResult fileQuery; 

async void CreateWatchFolder(StorageFolder folder) 
    { 
     var options = new QueryOptions(); 
     options.FolderDepth = FolderDepth.Deep; 
     fileQuery = folder.CreateFileQueryWithOptions(options); 
     _fileQuery.ContentsChanged += OnContentsChanged; 
     var files = await _fileQuery.GetFilesAsync(); 
    } 

    async void OnContentsChanged(IStorageQueryResultBase sender, object args) 
    { 
     // Do stuff, e.g. check for changes 
    } 

对于你的问题的#2,这会给你一个监视文件夹。任何时候,有一个在该StorageFolder中它会触发该事件,但它不知道哪个文件发生了更改,但是您可以编写代码来检查每次更新的详细信息,请参阅here

关于#1,确实很难说值得测试,我个人在玩游戏时表现糟糕用Sqlite和EF来处理UWP,但我只是一个专家而已。

问题3,您可能会考虑将缩略图缓存到其中一个应用程序数据文件夹。 LocalCache将是显而易见的选择,但实际上,如果您只做Local,则可以在UI中为图像源绑定URI路径。这不适用于LocalCache中最后一次检查的图像(大约三月份左右),但它与Local一起使用。它比将文件作为StorageFile加载然后用它创建一个Bitmap要快得多。

+0

还要注意第一种方法的最后一行。做一个GetFilesAsync()是必需的,以开始观看文件夹。 –

+0

那么我应该什么时候执行你提供的这个方法?我的意思是我可以在应用程序启动时执行它,直到应用程序关闭,它将继续观看文件夹(KnownFolders。VideoLibrary),如果其内容以任何方式从应用程序外部进行更改,则此事件将启动正确? – touseef

+0

本地和本地缓存有什么区别?你在谈论应用程序本地文件夹?你能否提供一些关于如何缓存的见解?我的意思是他们将被保存为本地文件夹中的.png文件?如果是,那么.png文件也将作为SorageFiles在以后的权利?这是更快吗?还请建议我关于其他属性,如文件名,我应该将它们保存在分贝?或者每次从图书馆检索它们,这将是一个更好的选择?谢谢 – touseef