GridView输入Excel时出现"System.OutOfMemoryException: Out of memory"及其解决方案。

一般我们用GridView输出Excel是,代码都是这样写的:

Response.Clear(); 
Response.AddHeader("content-disposition", "attachment;filename="+filename+".xls");
Response.Charset = "";
this.EnableViewState=false;
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";

System.IO.StringWriter stringWrite = new System.IO.StringWriter();
System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(stringWrite);

DataGrid myDataGrid=new DataGrid();

myDataGrid.DataSource=dsReport.Tables[1];
myDataGrid.DataBind();

myDataGrid.RenderControl(htmlWrite);
Response.Write(stringWrite.ToString());

Response.End();


 

当gridview的数据比较大的时候,会出现 System.OutOfMemoryException: Out of memory的错误。

解决的方法当然是减少内存的空间的占用量。

一下是从网上搜来的解决方案:

Response.Clear(); 
Response.AddHeader("content-disposition", "attachment;filename="+filename+".xls");
Response.Charset = "";
this.EnableViewState=false;
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.ContentType = "application/vnd.xls";

System.Web.UI.HtmlTextWriter htmlWrite = new HtmlTextWriter(Response.Output);

DataGrid myDataGrid=new DataGrid();
myDataGrid.DataSource=dsReport.Tables[1];
myDataGrid.DataBind();
myDataGrid.RenderControl(htmlWrite);

Response.End();

/*
This should divide the memory required by the actual report output HTML by 3, because before you were storing the entire thing in memory a total of at least three times before:
- In the StringBuilder
- In the String from the StringBuilder.ToString()
- In the Response object
*/

 

 

posted @ 2010-10-09 15:27  db's jim  阅读(1383)  评论(1编辑  收藏  举报