25

我是新手编程Windows存储与C#应用程序,我想了解如何处理图像内存。我的应用程序非常简单:WinRT如何处理BitmapImage和图像内存

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

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

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

UPDATE

在BUILD大会球队讨论的Windows Performance Toolkit。我从来没有听说过任何人提起PerfView所以我认为,WPT是用于分析内存和性能的最新和最伟大的工具,这里是一个链接:

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

+2

这里有一个非常陡峭的API,开始阅读[这里](http://msdn.microsoft.com/en-us/library/windows/desktop/ee719902%28v=vs.85%29.aspx) – 2013-03-23 22:29:07

+0

我相信大多数图像源对象都支持InMemoryRandomAccessStream或类似的东西。您可以尝试使用PerfView/PerfMon尝试并找出更多。 – 2013-05-12 17:23:08

+1

我不记得确切,但不是图像控件根据其大小设置缩放源? I.E.你正在把一个控件放在一个xaml窗口中,当图像真的是1920x1080时,图像控件的框架元素的大小是800x600。 – 2013-10-30 15:09:11

回答

1

一个简短的答案很可能是“最优”。不是一个聪明的人,那里只有很多不同的系统。其中一个提到了硬件加速,您还可以考虑内核数量,显示内存,磁盘速度,显示器位深度和分辨率,列表会不断变化。