Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 类型'的例外情况;System.OutOfMemoryException';被扔了。使用Itextsharper生成gridview的INF pdf时出现异常_C#_Asp.net Mvc_Pdf_Memory_Out - Fatal编程技术网

C# 类型'的例外情况;System.OutOfMemoryException';被扔了。使用Itextsharper生成gridview的INF pdf时出现异常

C# 类型'的例外情况;System.OutOfMemoryException';被扔了。使用Itextsharper生成gridview的INF pdf时出现异常,c#,asp.net-mvc,pdf,memory,out,C#,Asp.net Mvc,Pdf,Memory,Out,嗨,我在从gridview数据生成pdf时遇到OOM错误。对于40k记录,它可以正常工作,但之后会生成错误。我的剧本是 CreditInvoiceViewModel obj = new CreditInvoiceViewModel(); ResolveKeys(obj); obj.PrepareForExcelInView(sno); GridView gvReport = new GridView(); gvReport.AllowPaging = false; gvReport.DataSo

嗨,我在从gridview数据生成pdf时遇到OOM错误。对于40k记录,它可以正常工作,但之后会生成错误。我的剧本是

CreditInvoiceViewModel obj = new CreditInvoiceViewModel();
ResolveKeys(obj);
obj.PrepareForExcelInView(sno);
GridView gvReport = new GridView();
gvReport.AllowPaging = false;
gvReport.DataSource = obj.xresultDataset.Tables[0];
gvReport.DataBind();

string attachment = "attachment; filename=Employee.pdf";
Response.ClearContent();
Response.AddHeader("content-disposition", attachment);
Response.ContentType = "application/pdf";
StringWriter stw = new StringWriter();
HtmlTextWriter htextw = new HtmlTextWriter(stw);
gvReport.RenderControl(htextw);
Document document = new Document(PageSize.A4, 10f, 10f, 10f, 0f);
PdfWriter.GetInstance(document, Response.OutputStream);
document.Open();
StringReader str = new StringReader(stw.ToString());
HTMLWorker htmlworker = new HTMLWorker(document);
htmlworker.Parse(str);
document.Close();
Response.Write(document);
Response.End();
我在不到一个造币厂里得到了超过100000条记录的dt,但唯一的一行“htmlworker.Parse(str);”是罪魁祸首。我也尝试过AddCell(ph)方法,但结果甚至比上面的代码差。甚至尝试了sql2pdf存储过程,但对于大数据都失败了。
我必须打印大约200000条记录作为发票,有9-10列。我使用的是Windows7、SQLServer2008、VisualStudio2010、.NETFramework 4.5。做了这么多的研发工作。请提出任何意见。提前谢谢。我无法更改任何RAM或服务器,因此请仅建议代码特定的更改。

您是否尝试过任何内存探查器来查看内存真正泄漏的位置?从发布的代码中看不出任何明显的问题。假设这段代码(以及您没有显示的代码的resto)没有出现操作系统“内存泄漏”的问题(比如永不消失的引用),这可能不是“内存泄漏”的问题,而是GC恢复内存速度不够快的问题?看这里,我没有尝试过任何内存分析器,因为我不太清楚这一点。我认为这是因为大数据pdf。如何以及在何处在函数的单个调用中使用GC,因为pdf将在单个调用中创建。如果单个记录处理(生成单个pdf)足以导致OOM,那么如果您使用的某些库存在问题,则没有解决方案。如果问题是处理的REOCRD的“数量”,则可以通过调用System.GC.Collect()调用收集器。无论如何,这不是一个好的做法。您可以尝试找出哪个对象是内存消耗的罪魁祸首,并在“usin”语句中使用它。但是对象必须实现IDisposable。