• 締切済み

DataGridViewの仮想モードのRowCount

DataGridViewのVirtual Modeをtrueにしてデータを表示させています。 DataGridViewのRowCountを設定すると、件数が多い(数万件以上)場合に、CPUの使用率が高くなり、動作が遅くなってしまいます。 例: Dgview.RowCount = 100000; CellValueNeededイベント部分は普通に動作しているようで、他にどこで動作をしているかわかりません。 RowCount=100000 から下の行へ移動しないので、その後の処理も出来ません。 データ自体は正常に表示されます。 説明下手で申し訳ありませんが、原因のわかる方、回答お願いします。

みんなの回答

回答No.1

多分、メモリのスワップが多発しているのでしょう。 100000行あれば、グリッドセルが仮想かどうかに関わらず、100000個分の「行管理データ」をメモリに確保します。列数が多ければ、それなりに莫大なメモリが要るでしょう。 で、RowCountを設定した瞬間、必要なだけの「行管理データ」をコンストラクトする事になるのですが、ある程度以上の行数分コンストラクトすると、実メモリが足りなくなるので、前の方を仮想メモリにスワップアウトし始めます。 そしてそれは「必要な行数分、行管理データをコンストラクトし終わるまで続く」のです。 これをやっている間、プロセスが停止してしまっては困るので、このコンストラクト処理はバックグラウンドで行われます。 CPUがバックグラウンドで頑張っている(しかも仮想メモリをスワップしまくるから、ディスクアクセスも入る)のですから、CPUの使用率も上がるし、メインのプロセスの動作も遅くなります。

関連するQ&A