1

メインウィンドウは6000x6000pxのようなものです。そのウィンドウでは、多くのコントロール(5000以上)を使用でき、必要な場所でズーム/パンできます。

アプリケーションに10個の「テレビ画面」コントロールを追加しました。各コントロールのリフレッシュレートは100ミリ秒です。これを開始すると、すべてがクラッシュします...

それぞれ100msのリフレッシュレートを持つ10個のオブジェクトは多すぎるため、WPFはその時点でそれらを描画できません。WPFは、私が持っているものを描画するのに非常に時間がかかると結論付けています。

すべてがベクトルで描画されますが、それらに.CacheModeを追加しようとしましたが、どちらも機能しません。

私に何ができる?

PS My PCは、8コア、8 GB Ram、256 Mbビデオカード(nvidia quadro nvs 295)、win764ビットです。

4

3 に答える 3

3

グラフィックアダプタでサポートされている最大解像度を超えた場合、WPFはソフトウェアレンダリングを使用します。さらに、5kコントロール!信じられない。WPFは、想像するすべてのものに対する特効薬ではありません。アプリを再設計するか、使用しているテクノロジーを変更する必要があります。

于 2011-10-31T12:47:39.637 に答える
2

アプリケーションのコントロールの数を減らすことに取り組みます。5Kはかなりの量であり、おそらくその数を減らす方法があると思います。

たとえば、TextBlocksが1つのコントロールとしてレンダリングするTextBlocks代わりに、LabelsLabelsが4.0で3としてレンダリングするのを使用します(古いバージョンでは3つ以上だと思います)

また、一部のコントロールでUI仮想化を使用できるかどうかを確認してください。100個のアイテムのようなものListBoxを仮想化して、一度に10個しかレンダリングできません。

于 2011-10-31T13:27:35.450 に答える
2

ZoomableCanvasを見てください-100万アイテム。これは、本のすべての最適化を使用するときにWPFが実行できることの最良の例です。その例を取り上げて、モニターで最大解像度で実行することをお勧めします。それがうまく機能しない場合、WPFはこれを行うことができません。

解像度がビデオカードの解像度を超える場合、WPFがデフォルトでソフトウェアレンダリングになっていることに気づいていませんでした。知っておくべき良い警告です!

高性能のグラフィカルAPIに関しては、 Keirenを2番目に使用し、代わりにDirectX(SlimDXはマネージラッパーを提供します)を使用すると言います。

于 2011-12-22T16:53:53.457 に答える