UWP KnownFolder数据缓存

时间:2017-06-17 11:05:17

标签: c# xaml uwp background-task video-library

我正在尝试使用 KnownFolders 完成以下任务,即 UWP应用中的 VideoLibrary

  1. 加快加载时间。 (我需要从KnownFolders加载缩略图和文件名,如果库有大量文件,可能需要更多的时间。有更快的方法来缓存和存储它们,可能在sqlite数据库中,以及每次下次运行时从DB中获取它们,可以更快吗?

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

  3. 基本上我希望应用程序在打开时更快地加载库数据,那么推荐的方法是什么?我应该为应用程序使用后台任务吗?但是当应用程序没有运行时将数据保存在内存中可能不是一个好的解决方案,或者是它?或者我可以在应用程序启动(导航到库页面之前)后立即启动在 App.xaml.cs 中提取数据的过程,从而提高性能?

  4. 基本上:我在这里寻找一些建议和讨论,因为这里的问题可能没有严格的答案。 提前致谢任何建议都将受到赞赏。我的主要目标是将库与删除相同并在物理文件夹中添加文件,并提高应用程序中库的加载性能。 (是的,我正在使用缩略图加载库在gridview中

1 个答案:

答案 0 :(得分: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,很难说它值得测试。我个人在使用UWP玩Sqlite和EF时表现糟糕,但我不是专家。

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