web-dev-qa-db-ja.com

WPF DataGridのパフォーマンスを改善する

_.NET 3.5_ WPFアプリケーションには、WPFDataGridがあり、500列と50行で作成されます。アプリのパフォーマンスは、スクロール時、またはDataGrid.Items.Refresh()を実行するとき、または行を選択するときに非常に低くなります。

実際、アプリがレイアウトを更新するには約20秒かかります。 Layout_Updated()イベントは20秒後にトリガーされます。

列を50以下に減らすと、アプリの応答が非常に速くなります。私の発見によると、パフォーマンスは列数に直接関係しています。

DataGridパフォーマンスを改善するにはどうすればよいですか?

27
Kishor

DataGridオブジェクトを支援するためにオンにできるオプションがいくつかあります

EnableColumnVirtualization = true
EnableRowVirtualization = true

これらの2つが私が役立つと思う主なものです。次に、バインディングを非同期にしてみてください

ItemsSource="{Binding MyStuff, IsAsync=True}"

そして最後に、最大の画面サイズを超えても最大の高さと幅を設定すると役立つと聞きましたが、私は違いに気づいていませんでした(クレームは自動サイズ測定に関係していました)

MaxWidth="2560"
MaxHeight="1600"

また、DataGridScrollViewerを入れないでください。仮想化が失われるためです。これが役立つかどうか教えてください!

70
Alan

プロパティがあるかどうかを確認しますScrollViewer.CanContentScroll set False。このプロパティをfalseに設定すると、仮想化が無効になり、データグリッドのパフォーマンスが低下します。詳細については、これを参照してください CanContentScroll

4
Rajat Ghalni

一度にすべての50行をロードする代わりにこれを試してください

http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization

0
Constanta