将大数据导出为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();

将大数据导出为xls格式:系统内存不足异常

对于这类问题,不应该使用DataTable。DataTable将整个数据存储在内存中。

您应该使用DataReader从数据库中提取行。