在我的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 :(得分:0)
您可以尝试从这篇文章Optimize media resources (Windows Store apps using C#/VB/C++ and XAML)开始,并结合更多内容:
确保如果您在ListView / GridView中显示它们 - 您已启用虚拟化(您使用支持虚拟化的正确ItemsPanel)。
如果您只需要从本地存储加载图像 - 将绑定从Image.Source设置为正确的URI(ms-appx:///或ms-appdata:/// local /),并且图像控制将为您完成所有工作。
答案 1 :(得分: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);
这将初始化一组等待加载图像的等待任务,然后同时等待所有这些任务,以便它们并行执行。