2017-06-17 92 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