2012-07-30 116 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,這就是爲什麼它在這種情況下實際上表現更好。