winnovative pdf - недостаточно памяти и другие случайные исключения - PullRequest
2 голосов
/ 14 января 2010

у нас есть приложение asp.net 3.5, которое позволяет пользователям создавать множество диаграмм и экспортировать их через pdf.Это прекрасно работает для небольших PDF-файлов (менее 100 страниц), но когда мы делаем большие, мы получаем случайные ошибки.Вот некоторые из ошибок, которые мы видели:

- System.OutOfMemoryException
- Не удалось отобразить строку HTML.Не удалось получить изображение из строки html.Попробуйте установить LoadHtmlConcurrencyLevel = 1 ..
- Clone error.Недостаточно памяти.
- время ожидания завершения конвертации.
--System.OutOfMemoryException: недостаточно памяти.в System.Drawing.Image.FromStream (поток Stream, логическое значение useEmbeddedColorManagement, Boolean validateImageData) в System.Drawing.Image.FromStream (поток Stream)

Если я запускаю большой отчет несколько раз, я обычно получаю разные исключения,Иногда я могу заставить IIS аварийно завершить работу, и мне нужно выполнить iisreset для восстановления приложения.

Вот код, который мы запускаем.Мы создаем документ PDF с диаграммами (изображениями в формате png), а затем экспортируем его в массив байтов и помещаем в поток памяти.Мы передаем поток памяти функции, которая поворачивает некоторые изображения и т. Д., А затем вызываем метод 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)

Ответы [ 2 ]

3 голосов
/ 14 января 2010

IIS имеет ограничения на скрипты, которые на нем работают, как для памяти, так и для времени выполнения. Предположительно, ваш сценарий выходит за пределы времени выполнения и / или памяти. Их можно установить в настройках конфигурации IIS, но обычно они существуют по какой-либо причине (чтобы не допустить, чтобы один скрипт занимал всю память на сервере, или чтобы скрипт не работал вечно в бесконечном цикле, который вы бы сделали не может выйти, кроме перезапуска IIS.)

Включите отладку (которая отключает эти ограничения) и определите, сколько памяти фактически используются вашими сценариями при сбое, путем вывода queryObj("PeakWorkingSetSize") в файл журнала.

0 голосов
/ 08 августа 2014

Запускаете ли вы конвертер в 64-битном процессе, как рекомендовано в документации по продукту? Вы можете проверить требования к развертыванию в нашей онлайн-документации . В 32-битном режиме доступная память для .NET довольно ограничена. В IIS вы должны убедиться, что флаг 32-битных приложений имеет значение false.

Кроме того, чтобы уменьшить использование памяти при преобразовании HTML-страниц со многими и большими изображениями, можно установить для свойства ImagesScalingEnabled значение false. Полный образец кода для этой функции можно найти в настройке масштабирования изображений и демонстрации уровня сжатия JPEG .

...