我刚开始学习使用C#
编写Windows商店应用程序,并尝试理解如何处理图像内存。我的应用程序非常简单:
1)它使用Windows.UI.Xaml.Media.Imaging.BitmapImage
对象从文件引用一个位图,然后将其作为Windows.UI.Xaml.Controls.Image
对象的源。在我的情况下,磁盘上的图像具有比屏幕上显示的尺寸更大的尺寸,因此系统正在对其进行缩放。
我的问题是,WinRT如何处理图像的内存?我使用了vmmap
工具,并在映射文件部分中找到了我的图像文件条目。我猜这意味着该文件的原始字节已完全加载到内存中。由于这是一个JPG文件,这些字节必须被解码为像素字节。从我的测试中看来,设置BitmapImage的UriSource实际上不会导致进行任何处理,因为它需要0毫秒,而实际上存在一些惰性加载。
那么问题是:哪个对象是未压缩未缩放的像素数据的控制器?哪个对象是绘制在屏幕上的缩放像素数据的控制器?是否有可以轻松显示这个的工具?在Java世界中,我使用Eclipse内存分析器工具。我尝试使用PerfView,但结果对我来说毫无意义,似乎该工具是用于分析性能的。
更新:
在BUILD会议上,团队讨论了Windows Performance Toolkit
。我从未听过任何人提到PerfView,因此我认为WPT是分析内存和性能的最新最好的工具,下面是链接: