EPPlusを使用してDataGridviewデータをExcelファイルに転送しています。問題はプロセスがメモリを消費していることです。使用されているメモリを解放するには何が欠けていますか?外部では数千行でうまくいくようですが、プログラムで使用されるメモリは上昇し、エクスポートして保存してからExcelに戻ってきません。今私が100万行を輸出しようとすると、私は記憶がなくなります。DataGridviewデータをExcelに転送する
これは私のコードですが、このプロセスはバックグラウンドワーカーで実行されます。
Using p = New ExcelPackage
Dim sheetnum As Integer = 2
Dim ws As ExcelWorksheet = CreateSheet(p, "report")
For Each dgcol As DataGridViewColumn In dg.Columns
ws.Cells(1, col).Value = dgcol.HeaderText
col += 1
Next
For Each rowx As DataGridViewRow In dg.Rows
For Each colx As DataGridViewColumn In dg.Columns
ws.Cells(row, colx.Index + 1).Value = dg.Rows(rowx.Index).Cells(colx.Index).Value
Next
row += 1
BackgroundWorker1.ReportProgress(CInt(100 * Integer.Parse(rowx.Index + 1)/dg.Rows.Count), CInt(100 * Integer.Parse(rowx.Index + 1)/dg.Rows.Count))
If row = 1048577 Then 'Check if max rows have been reached and create a new sheet
ws = CreateSheet(p, "report" & sheetnum)
sheetnum += 1
row = 2
col = 1
For Each dgcol As DataGridViewColumn In dg.Columns
ws.Cells(1, col).Value = dgcol.HeaderText
col += 1
Next
End If
Next
Dim bin() As Byte = p.GetAsByteArray()
File.WriteAllBytes(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) & "\" & "report.xlsx", bin)
End Using
作業を終えたら、['ExcelWorksheet'](https://epplus.codeplex.com/SourceControl/latest#EPPlus/ExcelWorksheet.cs)を処分する必要があります。 –
@RezaAghaei提案していただきありがとうございますが、うまくいきませんでした。 – crimson589
私はそれが問題全体を解決するかどうかは分かりませんが、 'ExcelWorksheet'クラスの' Dispose'メソッドの実装を見てみると、コードが多くのリソースを解放し、おそらくコードの作成者がよく知っていることがわかりますいくつかのリソースが解放される必要がある私たちよりも。 –