2017-06-17 7 views
0

UWP KnownFolder:私のUWPアプリ私は<strong>KnownFolders</strong>、すなわちで次のタスクを実行しようとしているデータ・キャッシング

  1. 高速化ロード時間にVideoLibrary。 (サムネイルとファイル名をKnownFoldersからロードする必要があります。ライブラリに膨大な数のファイルがある場合、少し時間がかかることがあります。それらをキャッシュして保存する方法がありますか?おそらくsqliteデータベースにあります。

  2. システムファイルを変更すると同期がとれます(特定のライブラリ内で新しいファイルが追加または削除された場合、そのアプリケーションが実行されている間にどのように通知されますか)

  3. 基本的に私はそれが何がそれを達成するための推奨方法となりそう開くとアプリが速く、ライブラリのデータをロードしたいですか?私はアプリのためバックグラウンドタスクを使用する必要がありますかが、時にアプリイマイチメモリ内のデータを保持実行は良い解決策ではないかもしれませんか?またはアプリケーションが起動するとすぐに(ライブラリページに移動する前に)、パフォーマンスが向上するのであれば、App.xaml.csのデータを抽出するプロセスを開始できますか?

  4. 基本的にはここに私の質問に対して厳しい答えがないかもしれないので、私はいくつかの提案と議論を探しています。 ありがとうございました提案は歓迎されます。私の主な2つの目標は、削除とライブラリを同期し、物理フォルダ内のファイルを追加し、アプリ内のライブラリの読み込みパフォーマンスを向上させることです。 (とええ、私は同様サムネイルでGridViewのライブラリをロードしています。

+0

これは[search indexer](https://msdn.microsoft.com/en-us/magazine/mt620012.aspx?f=255&MSPPError=-2147217396)の使用に関する記事です。索引付けは、大量のファイルの列挙を高速化するためにOSが提供するものです。記事の「ライブラリを列挙するための最適化されたコード」の例を検索してください。 – 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を変更すると、イベントが発生しますが、変更内容はわかりませんが、毎回チェックするコードを書くことができます。テストする価値があります。個人的には、 UWPでSqliteとEFを使用していますが、私はそれに精通しています。

質問#3では、サムネイルをapp-dataフォルダの1つにキャッシュすることを検討します。 LocalCacheは明白な選択ですが、実際にはLocalだけではUIの画像ソースのURIパスをバインドできます。最後にチェックしたLocalCacheの画像では動作しませんが(3月程度)、ローカルでは動作します。これは、ファイルをStorageFileとしてロードしてからBitmapを作成するよりもはるかに高速です。

+0

また、最初の方法の最後の行に注意してください。フォルダの監視を開始するには、GetFilesAsync()を実行する必要があります。 –

+0

あなたはこの方法をいつ実行すればいいですか?つまり、アプリ起動時に実行するだけで、アプリが終了するまでは、フォルダ(KnownFolders。VideoLibrary)、アプリの外からコンテンツが変更された場合、このイベントは正しく開始されますか? – touseef

+0

ローカルとローカルキャッシュの違いは何ですか?アプリケーションのローカルフォルダについて話していますか?彼らはどのようにキャッシュすることができますか少しの洞察を提供してくださいできますか?私はそれらがローカルフォルダに.pngファイルとして保存されることを意味しますか?はいの場合、後で.pngファイルもSorageFilesとして取得されますか?それは速いですか?また、ファイル名のような他のプロパティについても教えてください。データベースに保存する必要がありますか?ライブラリから毎回それらを取得すると、より良い選択肢になりますか?ありがとう – touseef

関連する問題