VB2005 Datagridview の仮想モードでメモリリーク
VB2005にてDatagridviewの仮想モードを実装しています。
DataGridviewを全件ループ処理する場合にメモリが増加します。完了してもそのままメモリが減りません。これを回避する方法がありますか?CellValueNeededはメモリを消費し続けるものなのでしょうか。
実際のプログラムでは件数が多い場合にメモリの消費が止まらずメモリ不足に陥ります。
以下は単純なコードにしたサンプルです。これでもデバッグモードで動かすと起動時20Mくらいのメモリ消費がループ処理時に100Mくらいにに増えます。
※実際の処理でバインドしているデータ(datatable等)の方をループさせるという代替案がありますが、今回はdatagridviewから行った結果のメモリ不足についてご教授いただければと思います。
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
With Me.DataGridView1
.Columns.Add("Column1", "列1")
.Columns.Add("Column2", "列2")
.Columns.Add("Column3", "列4")
.Columns.Add("Column4", "列4")
.Columns.Add("Column5", "列5")
.Columns.Add("Column6", "列6")
.Columns.Add("Column7", "列7")
.VirtualMode = True
.RowCount = 100000
End With
End Sub
Private Sub DataGridView1_CellValueNeeded(ByVal sender As Object, _
ByVal e As System.Windows.Forms.DataGridViewCellValueEventArgs) _
Handles DataGridView1.CellValueNeeded
e.Value = e.RowIndex.ToString & "," & e.ColumnIndex.ToString
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
For i As Integer = 0 To DataGridView1.Rows.Count - 1
DataGridView1.Rows(i).Cells(1).Value = DataGridView1.Rows(i).Cells(2).Value
Next
MsgBox("終了")
End Sub
お礼
ありがとうございました。 初期化すると、すでに入力しているDATAも消えるのではないのでしょうか。 そこのところが、心配です。