2011-01-10 13 views
8

トレーダーが現在並行して実行している古い(Win32)バージョンと新しい(WPF)バージョンのブロッターソフトウェアがあります。ただし、WPFアプリケーションを実行すると、Win32アプリケーションの再描画速度が大幅に遅くなることがあります。WPF/Win32アプリケーションを並行して実行する際のパフォーマンスの問題?

WPFアプリケーションが実行されていない(または最小化されていない)場合、描画速度は、Win32アプリケーションでは流動的で高速です。 WPFアプリケーションを横に開き、Win32アプリケーションのUI描画速度が著しく低下します。 WPFアプリケーションを実行すると、Win32アプリケーション(グラフィックスが重い)から取り除かれたリソースの使用がトリガーされているようです。

CPUとメモリは飽和状態に近くないため、これらは関連していないようです。解像度を下げたり、表示するモニタの数を減らしたり(ビデオカードのメモリ使用量や帯域幅の負荷を減らす)しても、大きな違いはありません。そのため、グラフィックスハードウェアのパフォーマンスに問題はありません。次のような原因を説明できる

1つの仮説は次のとおりです。ボンネットの下

、我々は知っている基本的にの指示のキューである窓の「メッセージポンプ」にWPFとWin32アプリケーションの出力グラフィックス情報の両方スクリーンに描画するものWPFアプリケーションが実行されていないときに、Win32はこれに対して完全に自由にアクセスでき、画面の更新が流動的であるように見えます。それと並行してWPFアプリケーションを実行すると、このキューに追加のメッセージが配置されるため、Win32アプリケーションは各スクリーン要素の更新を行うために競合する必要があります。したがって、「ポンプを詰まらせる」ことがわかります。

上記の場合は、このような事態を防ぐために、ウィンドウメッセージポンプを管理/制御する方法をお勧めしますか?

フリッカーは、リソースが少なくなったときに表示されるタイプで、個々の要素(フォーム、ラベル)がちらつき、徐々に画面に引き込まれることがわかります。

ご意見やご提案がありましたら、お知らせください。

答えて

3

各プロセスには独自のメッセージポンプがあります。これは共有されません。

CPU使用率が高くない場合、WPFはハードウェアレンダリングを使用しているため、GPU飽和になる可能性があります。 GPUの利用に関する情報を入手できますか?

GPUの使用率を得るための以下の記事の詳細方法:

Programmatically fetch GPU utilization

+0

ありがとうございます、私たちはこれを検討しています。 –

+0

これは直接的な解決策ではありませんでしたが、これは適切な道のり(ハードウェア/ソフトウェアのレンダリングをより綿密に見ている)につながります。ありがとう! –

+0

@Gaurav私はそれがその地域の周りにあると思っていました - 助けになるのはうれしいです。 :) –

3

さて、私たちは、原因を見つけ、解決したと思います。要するに、ハードウェアとソフトウェアの高速化されたウィンドウはうまく動作しません。ボード全体のソフトウェアレンダリングを使用すると、以前にハードウェアアクセラレーションされたウィンドウを実行していたときに発生した不具合を修正できます。従来のWin32アプリケーションはすぐに廃止されるため、これは実行可能な妥協点です。ハードウェアアクセラレーションを元のアプリケーションに戻すだけで簡単に切り替えることができます。以下

なお、この問題は、同時に従来のソフトウェア加速2Dアプリケーション(X)と3DハードウェアアクセラレーションWPFの一方(Y)を実行することによって引き起こされているように見え、そしてグラフィックでありますドライバの問題。

Yを強制的にWPFソフトウェアアクセラレーションモードで実行すると、スクロールのパフォーマンスがほとんど低下しません(ボトルネックは依然としてグリッドの内部レイアウトコードなので)。

しかし、Yは現在、トレーダーのマシン上の他のすべてのWindowsアプリケーションと同様にソフトウェアアクセラレーションされた2Dアプリケーションとして実行されているため、Xの遅い描画問題を取り除きます。これはY以外のアプリケーションが減速を引き起こさない理由を説明しています。ソフトウェアとハ​​ードウェアアクセラレーションされたグラフィックアプリケーションが同時に実行されてもうまく動かないようです。

これは意味があります。たとえば、ハードウェアアクセラレータを使用したゲームをプレイすると、ハードウェア/ソフトウェアアクセラレーションモード間でゲームを切り替えるときにデスクトップが非常にゆっくりと再描画されます。

ありがたいことに、パフォーマンスに大きな影響を与えることなくハードウェアレンダリングをオフにすることができます。 Xが廃止されると、ハードウェアアクセラレーションは、Yで提供される小さなメリット(スムーズなアニメーションをサポートし、塗りつぶしグラデーションの使用量を増やさずに使用するなど)を元に戻すことができます。

関連する問題