【问题标题】:How to control when image data is loaded into memory in Windows Store Apps?如何控制图像数据何时在 Windows 应用商店应用程序中加载到内存中?
【发布时间】:2013-09-06 23:23:32
【问题描述】:

在 Windows Store App 中创建图像时,如何控制从磁盘读取数据的时间?

在 WPF 中,您可以使用BitmapCacheOptions 控制何时从磁盘读取图像。 BitmapCacheOptions.OnDemand 将推迟从磁盘读取数据,直到实际需要图像数据。这样做有一些缺点:

  • IO 成本通常表现为 UI 延迟;
  • 如果使用流作为图像源,则无法关闭流;
  • 如果文件被用作图像源,则该文件被锁定。

要解决这个问题,您可以使用BitmapCacheOptions.OnLoad 立即将图像读入内存。

如何控制图像数据何时加载到 Windows 应用商店应用程序的内存中?

WPF 代码如下所示:

var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.OnLoad;
bitmapImage.UriSource = path;
bitmapImage.EndInit();
bitmapImage.Freeze();

编辑 - 更多信息

WPA 表明,将 8.8mb 的图像放到屏幕上需要大约 330 毫秒。其中,170ms 用于文件 IO(包括 37ms 用于杀毒检查文件),160ms 用于 WIC 解码。

任何想法如何控制文件 IO 何时发生或如何触发 WIC 解码? (右击并在新标签中打开以查看完整尺寸)

【问题讨论】:

  • 您的问题解决了吗?请分享你的答案。

标签: image windows-8 io windows-runtime windows-store-apps


【解决方案1】:

对于 Windows 应用商店应用,我建议查看 AccessCache API - http://msdn.microsoft.com/en-us/library/windows/apps/windows.storage.accesscache.aspx

特别是 StorageApplicationPermissions 类。有了它,您可以添加各种要访问的存储项目。

查看FilePickerSample(或FileAccessSample)应用程序,了解有关如何使用它的更多信息。

【讨论】:

  • 感谢您花时间写这篇文章,但这不是我想要的。您提到的 API 使您可以访问文件,但我对下一部分感兴趣:一旦我有权访问,我如何控制图像何时解码到内存中......以及如何控制哪个线程进行解码?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多