5

5MPデジタルカメラからのライブ画像を継続的に表示するこのWPFアプリがあります。画像は最初にバイト配列からビットマップソースに変換され、次に画像コントロールに表示されます。

m_imageControl.Source = MyBitMapSource;

ストリーミング中のCPU使用率は約30〜35%でした。「RenderCapability.Tier>>16」は「Tier2」を示しているので、私のシステムは適切であると思います。WPFはハードウェアレンダリングを可能な限り利用しようとします。

興味深いことに、ソフトウェアのレンダリングが以下を使用して強制された場合:

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

CPU使用率は約25%に低下し、アプリは同じ表示フレームレートを報告しました(パフォーマンスへの影響はありません)。

ハードウェアレンダリングはソフトウェアレンダリングよりも優れたパフォーマンス(CPUが少ない)を提供するはずだと思ったので、この結果に戸惑いました。誰かがこれに光を当てることができますか?

私のシステム設定は次のとおりです。

  • OS:Windows764ビットUtimate
  • CPU:Inteli3530クアッドコア2.93HGhz
  • ビデオカード:NVIDIA GeForce GT5201G専用RAM
  • ビデオカードドライバ:NVIDIA8.17.12.95732012年9月2日
4

1 に答える 1

2

回答はこちらから

画像は最初にバイト配列からビットマップソースに変換され、次に画像コントロールに表示されます:"

ハードウェア レンダリングを使用すると、フレームごとに新しい画像を GPU にシリアル化することが強制されます。通常、GPU は画像をキャッシュできるため、シリアライゼーションのオーバーヘッドはレンダリングのオーバーヘッドよりも小さくなりますが、あなたのケースでは、GPU 上の画像を常に破棄しているため、GPU にプッシュしてレンダリングするメリットはありません。ハードウェア。

ソフトウェア レンダリングを強制することで、フレームごとに GPU へのプッシュを回避できます。これが、この場合の実際のパフォーマンスが向上する理由です。

于 2014-03-07T19:18:04.943 に答える