【问题标题】:How does WinRT handle BitmapImage and Image memoryWinRT如何处理BitmapImage和Image内存
【发布时间】:2013-03-13 12:41:38
【问题描述】:

我是使用 C# 编程 Windows 存储应用程序的新手,我正在尝试了解如何处理图像内存。我的应用很简单:

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

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

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

更新:

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

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

【问题讨论】:

  • 这背后有一个相当陡峭的api,开始阅读here
  • 我相信大多数图像源对象都支持 InMemoryRandomAccessStream 或类似的东西。您可以尝试使用 PerfView/PerfMon 来尝试了解更多信息。
  • 我不记得确切但图像控件不是根据其大小设置缩放源吗? IE。您在 xaml 窗口中放置一个控件,并且当图像实际上为 1920x1080 时,作为图像控件的框架元素的大小为 800x600?
  • 您认为“由于这是 JPG,这些字节必须解码为像素字节”的假设可能是错误的。在 Windows 8.1 中,jpeg 有时由图形硬件从部分解压缩的流中呈现。请参阅blogs.msdn.com/b/ie/archive/2013/09/12/… 了解更多信息。

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 2012-02-28
    • 2014-11-13
    • 1970-01-01
    • 2017-06-25
    相关资源
    最近更新 更多