_.NET 3.5
_ WPF
アプリケーションには、WPF
DataGrid
があり、500列と50行で作成されます。アプリのパフォーマンスは、スクロール時、またはDataGrid.Items.Refresh()
を実行するとき、または行を選択するときに非常に低くなります。
実際、アプリがレイアウトを更新するには約20秒かかります。 Layout_Updated()
イベントは20秒後にトリガーされます。
列を50以下に減らすと、アプリの応答が非常に速くなります。私の発見によると、パフォーマンスは列数に直接関係しています。
DataGrid
パフォーマンスを改善するにはどうすればよいですか?
DataGridオブジェクトを支援するためにオンにできるオプションがいくつかあります
EnableColumnVirtualization = true
EnableRowVirtualization = true
これらの2つが私が役立つと思う主なものです。次に、バインディングを非同期にしてみてください
ItemsSource="{Binding MyStuff, IsAsync=True}"
そして最後に、最大の画面サイズを超えても最大の高さと幅を設定すると役立つと聞きましたが、私は違いに気づいていませんでした(クレームは自動サイズ測定に関係していました)
MaxWidth="2560"
MaxHeight="1600"
また、DataGrid
にScrollViewer
を入れないでください。仮想化が失われるためです。これが役立つかどうか教えてください!
プロパティがあるかどうかを確認しますScrollViewer.CanContentScroll
set False
。このプロパティをfalseに設定すると、仮想化が無効になり、データグリッドのパフォーマンスが低下します。詳細については、これを参照してください CanContentScroll
一度にすべての50行をロードする代わりにこれを試してください
http://www.codeproject.com/Articles/34405/WPF-Data-Virtualization