Время от времени ABCpdf не хватает памяти - PullRequest
2 голосов
/ 07 октября 2008

В моем проекте используется сторонний компонент для создания динамических PDF-файлов в веб-системе VB.Net под названием ABCpdf.Net. (не ужасный инструмент, но и не очень хороший.)

Время от времени, по причинам, которые я не могу понять, объект документа выдает исключение SEHException. Копая дальше, оказывается, что это вызвано пользовательским исключением в объекте документа типа WebSupergoo.ABCpdf6.Internal.PDFException. Содержимое содержит только не очень полезный заголовок «Невозможно получить данные изображения. Недостаточно памяти». Обычно это происходит при попытке добавить изображение в PDF. Поскольку эти изображения имеют размер PNG менее 100 КБ, я думаю, их размер не является проблемой.

Кроме того, действительно странная вещь заключается в том, что, как только эта проблема начинает возникать, кажется, что единственный способ остановить ее - это перезагрузить веб-сервер, что, очевидно, немного уступает.

Кто-нибудь когда-либо имел эту проблему (или даже использовал этот инструмент?)

Ответы [ 3 ]

2 голосов
/ 07 октября 2008

Захватывающий. Я пришел к выводу, что именно так и должно быть. Вы все еще вызываете doc.Clear () в конце блока using?

2 голосов
/ 09 января 2009

Обновление, три месяца спустя:

Насколько я могу судить, все проблемы с памятью были решены при обновлении с ABCpdf 6 до 7. Казалось бы, версия 7 больше не является COM-объектом с оболочкой .NET, а управляет всем кодом снизу. вверх. Это все еще не самый лучший генератор PDF, но проблемы утилизации ресурсов, похоже, решены.

1 голос
/ 07 октября 2008

Я раньше не видел этой ошибки, но у нас были проблемы с памятью в ABC PDF.

Короче говоря, это НЕ полностью управляемая кодовая база, а просто оболочка .NET вокруг их COM-версии. При этом мы проследили, что проблема использования памяти связана с неправильной утилизацией их объектов.

Итак, вместо:


Dim doc As New Doc()
'etc...

сделать это:


    Dim doc as Doc
    Using doc As New Doc()
      'etc...
    End Using
...