2012-07-30 142 views
4

我有这款WPF应用程序可以连续显示来自500万像素数码相机的实时图像。图像从字节数组转换为第一的BitmapSource并随后被显示在一个图像控制:与硬件渲染相比,软件渲染导致CPU使用率降低

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位Utimate
  • CPU:英特尔酷睿i3 530四核2.93HGhz
  • 显卡:NVIDIA公司的GeForce GT 520 1G专用RAM
  • 视频卡驱动:NVIDIA 8.17.12.9573 09/02/2012
+0

得到了我的答案[here](http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/55ad9427-5b69-4870-b5e7-94b28ed861be)。 – seekingalpha 2012-08-01 17:27:38

+0

将你的帖子标记为已回答! (如果需要,自己创建一个答案) – Marko 2013-08-21 10:35:39

回答

2

回答here

映像从字节数组转换成的BitmapSource先 在图像控件中显示:”

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

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