Je transfère mes données datagridview à un fichier Excel en utilisant EPPlus, mon problème est le processus est la mémoire de manger, qu'est-ce que je manque pour libérer la mémoire utilisée? à l'extérieur, il semble bien avec quelques milliers de lignes, mais la mémoire utilisée par le programme augmente et ne redescend pas après l'exportation et l'enregistrement pour exceller. Maintenant, lorsque j'essaie d'exporter un million de lignes, je manque de mémoire.Transférer des données datagridview pour exceler
Voici mon code, ce processus s'exécute sur un travailleur d'arrière-plan.
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
Vous devez disposer de ['ExcelWorksheet'] (https://epplus.codeplex.com/SourceControl/latest#EPPlus/ExcelWorksheet.cs) après avoir fini de travailler avec. –
@RezaAghaei Merci pour la suggestion, mais cela n'a pas fonctionné. – crimson589
Je ne suis pas sûr si cela résoudra le problème entier, mais si vous jetez un oeil à l'implémentation de la méthode 'Dispose' pour la classe' ExcelWorksheet', vous verrez que le code libère beaucoup de ressources et probablement l'auteur du code sait mieux que nous que certaines ressources doivent être libérées. –