web-dev-qa-db-ja.com

WPFプログラムを高速化する方法は?

Windows PresentationFrameworkを使用したプログラミングが大好きです。ほとんどの場合、私はWPFとXAMLを使用してブラウザーのようなアプリを作成します。

しかし、私を本当に悩ませているのは、WPFの遅さです。いくつかのコントロールしかない単純なページは十分に速く読み込まれますが、ページが多くのデータ入力フィールド、1つまたは2つのタブコントロールなどを含むように、少し複雑になるとすぐに苦痛になります。

このようなページの読み込みには1秒以上かかる場合があります。確かに、特にそれほど高速ではないコンピューター(顧客のコンピューターを読んでください)では、時間がかかる可能性があります。

ページの値を変更するのと同じです。 WPF UIのすべてが、どういうわけか遅いです。

これはとても意地悪です!彼らは私にこの美しいフレームワークを与えてくれますが、それを非常に遅くしているので、私はいつもお客様に謝罪しなければなりません!

私の質問:

  1. WPFをどのように高速化しますか?
  2. ボトルネックをどのようにプロファイリングしますか?
  3. 遅さにはどのように対処しますか?

これはWPFの普遍的な問題のように思われるため、多くの状況や問題に役立つ一般的なアドバイスを探しています。

その他の関連する質問:

50
Sam
  1. WPFをどのように高速化しますか?

    次のプロファイリングツールのいずれかを使用した後、ボトルネックの原因が明らかであることがよくあります。

    • メモリが問題になる場合は、データを仮想化します。
    • レンダリング時間が問題になる場合は、コントロールを仮想化するか、可能な場合はコントロールテンプレートを簡略化します。
    • 処理時間が問題になる場合は、アルゴリズムを改善するか、その作業をバックグラウンドスレッドに移動して、作業の進行中にuiにスロバーを表示しようとします。

  2. ボトルネックをどのようにプロファイリングしますか?

  3. どのように遅さに対処しますか?

    プロファイリングとカウンセリング。

37
Todd White

コメントを追加できないので、これに対する新しい回答を投稿します。pdc09から、wpfアプリのプロファイルを作成する方法についていくつかのアイデアを提供するこのビデオを見つけました。これは非常に役立ったので、リンクを共有したいと思います。

高度なWPFアプリケーションのパフォーマンスチューニングと分析

5
HCL

WPFは、最新のグラフィックカードを搭載したコンピューターを対象としています。クライアントはAeroを実行できる最新のグラフィックカードを持っていますか?クライアントが古いグラフィックカードを使用している場合、WPFはソフトウェアレンダリングにフォールバックしますが、ハードウェアアクセラレーショングラフィックと比較して実行速度が非常に遅くなります。

また、アプリケーションのプロファイルを作成して、実際に遅い部分がWPFであることを確認することもできます。実際にボトルネックになっているものが他にある可能性があります。

2
jezell

アルファ透明度/ビットマップ効果を削除します。

1
Nash

アニメーションを避けることも時々大いに役立ちます。アニメーションを使用する必要がある場合は、フレームレートを下げてください。これにより、「感じた」パフォーマンスが向上します。

XAMLを回避し、UI全体をC#で作成すると便利だと思います。これにより、コントロールがいつ作成およびロードされるかを正確に制御できます。また、XAMLが「隠れて」何をしているのかを理解するのにも役立ちます。

0
pseudocode

詳細を教えていただけますか?

リストビューやグリッドのような複雑なものを使用した場合にのみ、パフォーマンスの低下に気づきました。解決策はそれを単純化することです。

それ以外は、アプリを初めてロードしたときにパフォーマンスが遅いことに気づきました。

HTH

0
Artur Carvalho