5

我有这个 WPF 应用程序,它可以连续显示来自 5MP 数码相机的实时图像。图像首先从字节数组转换为位图源,然后显示在 Image 控件中:

m_imageControl.Source = MyBitMapSource;

流式传输时,CPU 利用率约为 30-35%。“RenderCapability.Tier >> 16”表示“Tier 2”,所以我认为我的系统应该足够了,WPF 将尝试尽可能多地利用硬件渲染。

有趣的是,如果通过使用强制软件渲染:

RenderOptions.ProcessRenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;

CPU 使用率下降到 25% 左右,并且应用程序报告了相同的显示帧速率(没有性能影响)。

我对这个结果感到困惑,因为我认为硬件渲染应该比软件渲染提供更好的性能(更少的 CPU)。有人可以对此有所启发吗?

我的系统设置是:

  • 操作系统:Windows 7 64-bit Utimate
  • CPU:英特尔 i3 530 四核 2.93HGHz
  • 显卡:NVIDIA GeForce GT 520 1G 专用内存
  • 显卡驱动程序:NVIDIA 8.17.12.9573 09/02/2012
4

1 回答 1

2

从这里回答

图像首先从字节数组转换为位图源,然后显示在图像控件中:"

当您使用硬件渲染时,这会迫使它每帧将新图像序列化到您的 GPU。通常,GPU 可以缓存图像,因此序列化开销小于渲染开销 - 但在您的情况下,您会不断丢弃 GPU 上的图像,因此将其推送到 GPU 并渲染没有任何优势硬件。

通过强制软件渲染,您可以避免每帧都向 GPU 推送,这就是为什么它在这种情况下实际上表现更好的原因。

于 2014-03-07T19:18:04.943 回答