2010-01-14 3 views
2

우리는 사용자가 많은 차트를 생성하고 pdf를 통해 내보낼 수있는 asp.net 3.5 응용 프로그램을 보유하고 있습니다. 이것은 작은 pdf (100 페이지 미만)에서는 잘 작동하지만, 큰 페이지를 수행 할 때 임의의 오류가 발생합니다. 우리가 본 오류 중 일부는 다음과 같습니다.winnovative pdf - 메모리 부족 및 기타 무작위 예외

- System.OutOfMemoryException
- HTML 문자열을 렌더링 할 수 없습니다. HTML 문자열에서 이미지를 가져올 수 없습니다. LoadHtmlConcurrencyLevel = 1로 설정하십시오.
- 복제 오류. 메모리가 부족합니다 ..
- 변환 대기 시간이 만료됩니다.
- System.OutOfMemoryException : 메모리가 부족합니다. 나는 큰 보고서를 여러 번 실행하면 System.Drawing.Image.FromStream에서 System.Drawing.Image.FromStream (스트림 스트림, 부울 useEmbeddedColorManagement, 부울 validateImageData) (스트림 스트림)에서

, 나는 보통 다른 예외를 얻을 . 때로는 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 구성 설정에서 설정할 수 있지만 일반적으로 이유는 있습니다 (단일 스크립트가 서버의 모든 메모리를 차지하지 못하도록하거나 스크립트가 무한 루프에서 영원히 실행되는 것을 방지하기 위해서입니다.

을 로그 파일로 출력하여 스크립트가 실제로 사용할 때 사용하는 메모리의 양을 결정하고 디버깅을 설정합니다.

0

제품 설명서에서 권장 한대로 64 비트 프로세스에서 변환기를 실행합니까? deployment requirements in our online documentation을 확인할 수 있습니다. 32 비트 모드에서는 .NET 용 메모리가 상당히 제한적입니다. IIS에서 32 비트 응용 프로그램 플래그가 false인지 확인해야합니다.

또한 많은 크고 큰 이미지가 포함 된 HTML 페이지를 변환 할 때 메모리 사용량을 줄이려면 ImagesScalingEnabled 속성을 false로 설정할 수 있습니다. set images scaling and JPEG compression level demo에서이 기능의 전체 샘플 코드를 찾을 수 있습니다.