- 締切済み
DataGridViewの仮想モードのRowCount
DataGridViewのVirtual Modeをtrueにしてデータを表示させています。 DataGridViewのRowCountを設定すると、件数が多い(数万件以上)場合に、CPUの使用率が高くなり、動作が遅くなってしまいます。 例: Dgview.RowCount = 100000; CellValueNeededイベント部分は普通に動作しているようで、他にどこで動作をしているかわかりません。 RowCount=100000 から下の行へ移動しないので、その後の処理も出来ません。 データ自体は正常に表示されます。 説明下手で申し訳ありませんが、原因のわかる方、回答お願いします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- chie65536(@chie65535)
- ベストアンサー率44% (8740/19838)
回答No.1
多分、メモリのスワップが多発しているのでしょう。 100000行あれば、グリッドセルが仮想かどうかに関わらず、100000個分の「行管理データ」をメモリに確保します。列数が多ければ、それなりに莫大なメモリが要るでしょう。 で、RowCountを設定した瞬間、必要なだけの「行管理データ」をコンストラクトする事になるのですが、ある程度以上の行数分コンストラクトすると、実メモリが足りなくなるので、前の方を仮想メモリにスワップアウトし始めます。 そしてそれは「必要な行数分、行管理データをコンストラクトし終わるまで続く」のです。 これをやっている間、プロセスが停止してしまっては困るので、このコンストラクト処理はバックグラウンドで行われます。 CPUがバックグラウンドで頑張っている(しかも仮想メモリをスワップしまくるから、ディスクアクセスも入る)のですから、CPUの使用率も上がるし、メインのプロセスの動作も遅くなります。