我正在使用EPPlus將我的datagridview數據傳輸到excel文件,我的問題是進程正在吃內存,我錯過了什麼以釋放已用內存?在外部看起來好幾千行,但程序使用的內存上升,並不會在導出和保存到Excel後回落。現在,當我嘗試導出一百萬行時,內存不足。將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'方法,您將看到代碼釋放了很多資源,可能代碼的作者知道的更好比我們需要釋放一些資源。 –