Pregunta

El proyecto en el que estoy trabajando está utilizando un componente de terceros para crear archivos PDF dinámicos en un sistema web de VB.Net llamado ABCpdf.Net. (No es una herramienta terrible, pero tampoco una gran.)

De vez en cuando, por razones que no puedo entender, el objeto de documento lanza una SEHException. Al investigar más, resulta que esto se debe a una excepción personalizada en el objeto de documento del tipo WebSupergoo.ABCpdf6.Internal.PDFException. El contenido solo contiene el título que no es muy útil " Imposible obtener datos de imagen. Fuera de la memoria " Normalmente esto sucede cuando se intenta agregar una imagen al PDF. Dado que estas imágenes son PNG de menos de 100k, supongo que su tamaño no es el problema.

Además, lo realmente extraño es que una vez que este problema comienza a aparecer, la única forma de detenerlo parece ser reiniciar el servidor web, que es claramente un poco por debajo del nivel.

¿Alguna vez alguien ha tenido este problema (o incluso ha usado esta herramienta?)

¿Fue útil?

Solución 2

Actualización, tres meses después:

Por lo que puedo decir, todos los problemas de memoria se resolvieron al actualizar de ABCpdf 6 a 7. Parece que la versión 7 ya no es un objeto COM con un envoltorio .NET, sino todo el código administrado desde la parte inferior. arriba. Todavía no es el mejor generador de PDF, pero los problemas de eliminación de recursos parecen haberse resuelto.

Otros consejos

Fascinante. Llegué a la conclusión de que eso es lo que debe estar sucediendo. ¿Todavía llama a doc.Clear () al final del bloque de uso?

No he visto este error específicamente antes, pero hemos tenido problemas de memoria con ABC PDF antes.

La historia corta es que NO es una base de código completamente administrada, sino simplemente un contenedor de .NET en torno a su versión COM. Dicho esto, rastreamos nuestro problema de uso de la memoria para no desechar sus objetos correctamente.

Entonces, en lugar de:


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

haz esto:


    Dim doc as Doc
    Using doc As New Doc()
      'etc...
    End Using
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top