将大数据导出为xls格式:系统内存不足异常
本文关键字:格式 系统 内存不足 异常 xls 数据 | 更新日期: 2023-09-27 17:59:25
我正在将一个大型DataTable导出为Excel工作表(.xls)格式。我在这里调用存储过程,它返回DataTable。用于返回7,50000行和93列的存储过程。
在后端,如果我传递存储过程的参数,则需要8分钟才能完成该过程,因为这是一个漫长的过程。
但是,当我从前端调用该过程时,在将记录分配给DataTable时,会发生"System Out Of Memory"异常。
所以当我用谷歌搜索它时,我知道这是因为它的大小超过了服务器RAM的大小,所以它抛出了这个异常。当我导出小型DataTable时,它运行良好。
替代方法是什么?有人建议我。下面是我的代码,
C#:
DataTable dt = BindDatatable();
Response.ClearContent();
Response.Buffer = true;
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}", "MBQ_Auto.xls"));
Response.ContentType = "application/ms-excel";
//Response.ContentType = "application/octet-stream";
//Response.ContentType = "text/tab-separated-values";
string str = string.Empty;
foreach (DataColumn dtcol in dt.Columns)
{
Response.Write(str + dtcol.ColumnName);
str = "'t";
}
Response.Write("'n");
int rowCount = 0;
foreach (DataRow dr in dt.Rows)
{
str = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
Response.Write(str + Convert.ToString(dr[j]));
str = "'t";
}
Response.Write("'n");
if (unchecked(++rowCount % 1024 == 0))
Response.Flush();
}
Response.End();
对于这类问题,不应该使用DataTable。DataTable将整个数据存储在内存中。
您应该使用DataReader从数据库中提取行。