Вопрос

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

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

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

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

Это было полезно?

Решение 2

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

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

Другие советы

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

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

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

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


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

сделай это:


    Dim doc as Doc
    Using doc As New Doc()
      'etc...
    End Using
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top