2013-05-20 29 views
2

在我的Windows應用商店應用程序中,我在獨立存儲中保存/使用文件(幾乎是圖像)。
當我需要呈現的圖像我使用下列內容:從獨立存儲加載文件的最佳方式

var file = await folder.GetFileAsync(fileName); 
using (var stream = await file.OpenAsync(FileAccessMode.Read)) 
{ 
    obj.Image = new BitmapImage(); 
    await obj.Image.SetSourceAsync(stream); 
} 

但是,當我在同一個頁面中使用的圖像3+我有滯後。
我正在尋找更快的解決方案來訪問隔離的存儲文件。

+0

您需要將代碼旋轉到單獨的線程。你阻止了UI線程,這會給你帶來的延遲。 –

回答

0

你可以嘗試啓動本文Optimize media resources (Windows Store apps using C#/VB/C++ and XAML),和夫婦更多的事情:

  1. 確保如果在ListView/GridView控件展示他們 - 你已經啓用了虛擬化(使用權ItemsPanel它支持虛擬化)。

  2. 如果您只是需要從本地存儲器加載圖像 - 將Image.Source的綁定設置爲正確的URI(ms-appx:///或ms-appdata:/// local /)和Image控制會爲你做所有事情。

0

我不知道如何打開多個圖像,但由於所有方法都是異步的,因此不應該按順序遍歷文件,而是要平行打開所有文件。

foreach (var fileName in fileNames) 
{ 
    var file = await folder.GetFileAsync(fileName); 
    using (var stream = await file.OpenAsync(FileAccessMode.Read)) 
    { 
     obj.Image = new BitmapImage(); 
     await obj.Image.SetSourceAsync(stream); 
    } 
} 

你應像這樣:

// not sure about the type of obj 
public async Task<Image> LoadImage(string fileName, dynamic obj) 
{ 
    var file = await folder.GetFileAsync(fileName); 
    using (var stream = await file.OpenAsync(FileAccessMode.Read)) 
    { 
     obj.Image = new BitmapImage(); 
     await obj.Image.SetSourceAsync(stream); 
    } 
} 

var tasks = fileNames.Select(f => LoadImage(f, obj)).ToArray(); 
await Task.WhenAll(tasks); 

所以不是這樣(在這裏你就等着前面的圖像開始加載下一個之前加載)

這將初始化一系列加載圖像的等待任務,然後同時等待所有這些任務,以便它們將並行執行。