[C#] WPF - EnableColumnVirtualization プロパティと EnableRowVirtualization プロパティを使用して DataGrid のパフォーマンスを向上させる方法

DataGrid.EnableRowVirtualization プロパティの概要

DataGrid.EnableRowVirtualization プロパティ (System.Windows.Controls) Microsoft Learn

この属性のデフォルト値は true です。これをオンにする機能は、DataGrid の現在のビューの高さに基づいて、表示のためにデータ ソースから読み取る必要があるレコードの数を決定することです。たとえば、10,000 件のレコードがある場合データ ソース内のデータの部分の数に応じて、DataGrid の現在表示されているビューの高さは 50 個のデータのみを表示できるため、DataGrid の読み込み速度が向上し、メモリが節約されます。

DataGrid.EnableColumnVirtualization プロパティの概要

DataGrid.EnableColumnVirtualization プロパティ (System.Windows.Controls) Microsoft Learn

このプロパティのデフォルト値は false です。表示するデータ ソースに多くの列が含まれている場合は、これを true に設定することをお勧めします。これにより、DataGrid の読み込み速度が向上し、メモリが節約されます。

EnableRowVirtualization プロパティと EnableColumnVirtualization プロパティを使用する場合の注意事項

WPF で DataGrid コントロールを使用する場合、EnableRowVirtualization プロパティと EnableColumnVirtualization プロパティによりデータ テーブルのパフォーマンスを向上させることができます。これら 2 つのプロパティの目的は、行と列の仮想化を有効または無効にして、すべてのデータを一度にロードするのではなく、必要なときにデータの表示部分のみを表示することです。

次の点に注意する必要があります。

  1. デフォルトでは、EnableRowVirtualization が有効になり、EnableColumnVirtualization が無効になります。これらを有効または無効にするには、XAML ファイルでこれら 2 つのプロパティを true または false に設定する必要があります。

  2. 仮想化が有効になっている場合、DataGrid は必要に応じて行と列を動的にロードおよびアンロードします。大規模なデータ セットを DataGrid にロードするときにパフォーマンスの問題が発生する可能性があります。したがって、仮想化を有効にするかどうかは、実際の状況に基づいて決定する必要があります。

  3. 仮想化を有効にしてもパフォーマンスの問題が発生する場合は、ページング、ソートなどの他の手法を使用してデータ テーブルのパフォーマンスを最適化することを検討できます。

  4. コードでは、DataGrid の ItemsSource プロパティを設定することでデータ ソースをバインドできます。同時に、DataGrid の AutoGenerateColumns プロパティを false に設定することで、列の生成を手動で制御することもできます。これにより、DataGrid の動作をより詳細に制御できるようになり、パフォーマンスが向上します。

  5. DataGrid の幅と高さが適切な範囲内であることを確認してください (幅と高さの属性値を手動で設定するなど)。比率に基づいてウィンドウに DataGrid の幅と高さを自動的に計算させる場合 (配置するなど)グリッド コンポーネントの DataGrid)、通常は発生しません。ただし、DataGrid コンポーネントを Grid に配置し、次に Grid コンポーネントを Expander コンポーネントに配置する場合、DataGrid の高さが人為的に制限されていない場合、DataGrid の高さは実際のデータ ソース数の乗算に基づいて計算されます。 DataGrid の高さ (EnableRowVirtualization=true を意味します) は、実際には期待どおりに機能しません。

使用例

ここで DataGrid にバインドされているデータ ソースは、10,000 行を超えるデータの表示を超えています。「<RowDefinition Height="400"/>」を使用して、最大高さを 400 に設定します。「<RowDefinition Height="400"/」を変更した場合は、 >" を "<RowDefinition Height="*"/>" または "<RowDefinition Height="auto"/>" に変更すると、"EnableRowVirtualization=true" が失敗します。10,000 行以上のデータを初期化するのに 6 分近くかかりました。同時に、プログラムは多くのメモリを消費し、 DataGrid の垂直スクロール バーは表示されません。これは、DataGrid がすべての行の高さを独自の高さとして直接追加していることを示しています。

おすすめ

転載: blog.csdn.net/u011775793/article/details/135361833
おすすめ