我们有一个asp.net 3.5应用程序,允许用户生成许多图表并通过pdf导出它们。这适用于较小的pdf(少于100页),但是当我们做较大的pdf时,我们会得到随机错误。我们看到的一些错误是:
- 的System.OutOfMemoryException
- 无法呈现HTML字符串。无法从html字符串中获取图像。尝试设置LoadHtmlConcurrencyLevel = 1 ..
- 克隆错误。内存不足..
- 等待转换完成的时间。
--System.OutOfMemoryException:内存不足。
在System.Drawing.Image.FromStream(Stream stream,Boolean useEmbeddedColorManagement,Boolean validateImageData)
在System.Drawing.Image.FromStream(Stream stream)
如果我多次运行大报告,我通常会得到不同的例外情况。有时我可以让IIS崩溃,我必须做一个iisreset才能恢复应用程序。
以下是我们运行的代码。我们使用图表(png图像)创建PDF文档,然后将其导出为字节数组并将其放入内存流中。我们将内存流传递给一个旋转某些图像等的函数,然后调用doc.save方法将其导出。
Dim mainPageBytes() As Byte = PDF.GetBytes
Dim stream As New System.IO.MemoryStream(mainPageBytes)
Dim existingDoc As New PDFCreator.Document(stream)
Dim doc As PDFCreator.Document = GetDocument(mainPageBytes, GetChartingPageNumbers(PDF.ConversionSummary), pageOrientation, user, existingDoc)
doc.Save(response, True, Me.DocumentName)
答案 0 :(得分:3)
IIS对内存和运行时的脚本都有限制。据推测,您的脚本正在超越运行时和/或内存限制。这些可以在IIS配置设置中设置,但它们通常是有原因的(为了防止单个脚本占用服务器上的所有内存,或者防止脚本永远在无限循环中运行,你会没有办法退出重启IIS。)
启用调试(禁用这些限制)并通过将queryObj("PeakWorkingSetSize")
输出到日志文件来确定脚本在崩溃时实际使用的内存量。
答案 1 :(得分:0)
您是否按照产品文档中的建议以64位进程运行转换器?您可以查看deployment requirements in our online documentation。在32位模式下,.NET的可用内存非常有限。在IIS中,您必须确保32位应用程序标志为false。
此外,为了在转换包含许多大图像的HTML页面时减少内存使用量,您可以将ImagesScalingEnabled属性设置为false。您可以在set images scaling and JPEG compression level demo中找到此功能的完整示例代码。