Memory management WinRT如何处理位图图像和图像内存

Memory management WinRT如何处理位图图像和图像内存,memory-management,windows-8,windows-runtime,windows-store-apps,clr,Memory Management,Windows 8,Windows Runtime,Windows Store Apps,Clr,我不熟悉使用C编程Windows存储应用程序,我正在尝试了解图像内存是如何处理的。我的应用程序非常简单: 1) 它使用Windows.UI.Xaml.Media.Imaging.BitmapImage对象从文件中引用位图,然后将其用作Windows.UI.Xaml.Controls.Image对象的源。在我的例子中,磁盘上的图像的尺寸比屏幕上显示的尺寸大,因此系统会对其进行缩放 我的问题是WinRT如何处理图像的内存?我使用了vmmap工具,在“映射文件”部分,我看到一个用于我的图像文件的条目。

我不熟悉使用
C
编程Windows存储应用程序,我正在尝试了解图像内存是如何处理的。我的应用程序非常简单:

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

我的问题是WinRT如何处理图像的内存?我使用了
vmmap
工具,在“映射文件”部分,我看到一个用于我的图像文件的条目。我猜这意味着这个文件的原始字节已完全加载到内存中。因为这是一个JPG,所以必须将这些字节解码为像素字节。从我的测试中可以看出,设置BitmapImage的URI源实际上并不会导致任何处理,因为它需要0毫秒的时间,相反,存在一些延迟加载

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

更新

在构建会议上,团队讨论了
Windows性能工具包
。我从来没有听说有人提到过PerfView,所以我相信WPT是分析内存和性能的最新和最好的工具,下面是一个链接:


简短的回答很可能是“最佳的”。不是一个聪明人,只是有很多不同的系统。一个提到硬件加速,你也可以考虑内核的数量,显示内存,磁盘速度,监视器的比特深度和分辨率,这个列表一直在继续。

后面有一个非常陡峭的API,开始阅读我相信大多数图像源对象都支持在一个内存中的随机访问流或类似的东西后面。您可以尝试使用PerfView/PerfMon来尝试了解更多信息。我记不清了,但是图像控件是否根据其大小设置缩放源?也就是说,当图像实际为1920x1080时,您将控件放在xaml窗口中,作为图像控件的框架元素的大小为800x600?您的假设“由于这是JPG,这些字节必须解码为像素字节”可能是错误的。在Windows 8.1中,图形硬件有时会从部分解压缩的流中渲染JPEG。有关更多信息,请参阅。