2010-01-14 30 views
2

我們有一個asp.net 3.5應用程序,允許用戶生成許多圖表並通過pdf導出它們。這適用於較小的pdf(少於100頁),但是當我們做的較大時,我們會得到隨機錯誤。一些我們所看到的錯誤是:winnovative pdf - 內存不足和其他隨機異常

--System.OutOfMemoryException
--Could不渲染HTML字符串。無法從html字符串中獲取圖片。嘗試設置LoadHtmlConcurrencyLevel = 1 ..
- 克隆錯誤。內存不足
- 超時等待轉換完成。 - 內存不足 - 內存不足。 在System.Drawing.Image.FromStream(流流,布爾useEmbeddedColorManagement,布爾validateImageData) 在System.Drawing.Image.FromStream(流流)

如果我多次運行大報告中,我通常會得到不同的異常。有時我可能會讓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) 

回答

3

IIS對其上運行的腳本有限制,包括內存和運行時。據推測你的腳本正在超越運行時間和/或內存限制。這些可以在IIS配置設置中進行設置,但通常出於某種原因(爲了防止單個腳本佔用服務器上的所有內存,或防止腳本在無限循環中永遠運行無法退出重新啓動IIS。)

打開調試(禁用這些限制),並確定當腳本輸出queryObj("PeakWorkingSetSize")到日誌文件時崩潰實際使用的內存量。

0

您是否按照產品文檔中的建議在64位進程中運行轉換器?您可以檢查deployment requirements in our online documentation。在32位模式下,.NET的可用內存非常有限。在IIS中,您必須確保32位應用程序標誌爲false。

另外,爲了減少使用大量圖像轉換HTML頁面時的內存使用量,可以將ImagesScalingEnabled屬性設置爲false。您可以在set images scaling and JPEG compression level demo中找到此功能的完整示例代碼。