【发布时间】:2022-04-27 14:47:33
【问题描述】:
开发环境:
- 操作系统 - Windows 7 64bit
- CPU - i5 460M
- 内存 - 8GB
- .NET 框架 - 4.0
- Excel 互操作 - Microsoft Excel 14.0 对象库
我正在使用 Excel-Interop 从 DataGridView (dgv) 导出 excel 文件。
当我保存超过 150,000 行时
OutOfMemoryException
被抛出。
{
object[,] valueObjArray = new object[rowCnt, colCnt];
int rowCnt = dgv.Rows.Count;
int colCnt = dgv.Columns.Count;
for (int rowIndex = 0; rowIndex < rowCnt; rowIndex++)
{
for (int colIndex = 0; colIndex < colCnt; colIndex++)
{
valueObjArray[rowIndex, colIndex] = dgv[colIndex, rowIndex].Value;
}
}
_workSheet.get_Range("A1", Convert.ToChar(colCnt + 64).ToString() + "1").Value2 = headerObjArray;
_workSheet.get_Range("A2", Convert.ToChar(colCnt + 64).ToString() + (rowCnt + 1).ToString()).Value2 = valueObjArray;
_workSheet.get_Range("B2", "B" + (rowCnt+1).ToString()).NumberFormat = "yyyy-mm-dd hh:mm";
_workBook.SaveAs(path);
}
这是我所知道的加快速度的最佳方式。
但是,在监控 RAM 之后,我认为它会导致内存增加。当内存使用量达到大约 900Mb 时抛出异常。
如何捕捉这个异常?
【问题讨论】:
-
@Trix 感谢您的编辑:D
-
我最后保存了 258927 行 15 列。导出的文件大小为 24.2MB,内存使用量约为 600Mb。
-
在你写的问题中,你有 150,00 行的问题。它小于 258,927。
-
您在哪一行收到了 OutOfMemoryException?在创建 valueObjArray 或调用 SaveAs 方法的行中...
-
@MichałKomorowski _workSheet.get_Range("A2", Convert.ToChar(colCnt + 64).ToString() + (rowCnt + 1).ToString()).Value2 = valueObjArray;这条线收到了。 258,927 行成功,但 270,000 行失败
标签: c# excel out-of-memory export-to-excel excel-interop