memory-management - WinRT 如何处理 BitmapImage 和 Image 内存

标签 memory-management windows-8 windows-runtime windows-store-apps clr

我是编程新手视窗 使用 C# 存储应用程序我试图了解图像内存是如何处理的。我的应用程序非常简单:

1) 它使用 Windows.UI.Xaml.Media.Imaging.BitmapImage 从文件中引用位图对象,然后将其用作 Windows.UI.Xaml.Controls.Image 的源目的。在我的情况下,磁盘上的图像尺寸大于屏幕上显示的尺寸,因此系统会对其进行缩放。

我的问题是如何 WinRT 处理图像的内存?我用了 vmmap工具,我在映射文件部分看到我的图像文件有一个条目。我想这意味着该文件的原始字节已完全加载到内存中。由于这是 JPG,因此必须将这些字节解码为像素字节。从我的测试来看,设置 BitmapImage 的 UriSource 实际上并没有导致任何处理发生,因为它需要 0 毫秒,而是进行了一些延迟加载。

所以问题是:哪个对象是未压缩未缩放像素数据的支配者?什么对象是在屏幕上绘制的缩放像素数据的支配者?是否有工具可以轻松地向我展示这一点?在 Java 世界中,我使用 Eclipse 内存分析器工具。我尝试使用 PerfView,但结果对我来说毫无意义,似乎该工具旨在分析性能。

更新 :

在BUILD session 上,团队讨论了Windows Performance Toolkit .我从来没有听说过任何人提到 PerfView,所以我相信 WPT 是分析内存和性能的最新最好的工具,这里是一个链接:

http://msdn.microsoft.com/en-us/performance/cc825801.aspx

最佳答案

简短的回答很可能是“最佳”。不是一个聪明的人,那里有很多不同的系统。一提到硬件加速,你还可以考虑核心数、显示内存、磁盘速度、显示器位深度和分辨率,不胜枚举。

关于memory-management - WinRT 如何处理 BitmapImage 和 Image 内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15590998/

相关文章:

wsdl - 服务堆栈 WSDL 错误。 Endpoint 与 Windows Store 应用程序不兼容。跳过...

c# - 使用 C#/XAML 在 Metro 风格应用程序中将 Canvas 保存为图像

c# - skydrive System.Dynamic.DynamicObject

c# - 在 WP8.1 应用程序中使用转换的问题

c# - MySQL 更改表内存增加

c - 为什么 C 中没有 "memsize"返回使用 malloc 在堆中分配的内存块的大小?

c# - 如何将按钮添加到 Windows 8 Toast 通知?

C++ 控制全局对象的析构函数顺序

c++ - 在标题中定义 cv::Mat 后跟另一个 Mat 避免了多个 channel

xaml - 将新的 Windows 8.1 搜索框设置为仅使用字形