Question

Le projet en cours utilise un composant tiers pour créer des PDF dynamiques dans un système Web VB.Net appelé ABCpdf.Net. (Ce n'est pas un outil terrible, mais pas excellent non plus.)

De temps en temps, pour des raisons que je ne peux pas comprendre, l'objet document lève une exception SEHException. En creusant davantage, il s’avère que cela est dû à une exception personnalisée dans l’objet document du type WebSupergoo.ABCpdf6.Internal.PDFException. Le contenu ne contient que le titre peu utile "Impossible d'obtenir des données d'image. Mémoire insuffisante " Cela se produit généralement lorsque vous essayez d'ajouter une image au PDF. Comme ces images sont des PNG de moins de 100 000, je suppose que leur taille n’est pas le problème.

De plus, ce qui est vraiment étrange, c’est qu’une fois que ce problème se pose, le seul moyen de l’arrêter semble être de redémarrer le serveur Web, ce qui est clairement un peu inférieur à la normale.

Quelqu'un at-il déjà rencontré ce problème (ou même utilisé cet outil?)

Était-ce utile?

La solution 2

Mise à jour trois mois plus tard:

Autant que je sache, les problèmes de mémoire ont tous été résolus lors de la mise à niveau de ABCpdf 6 à 7. Il semblerait que la version 7 ne soit plus un objet COM avec un wrapper .NET, mais tout le code géré situé du bas up. Ce n’est toujours pas le meilleur générateur de PDF, mais les problèmes d’élimination des ressources semblent avoir été résolus.

Autres conseils

Fascinant. J'étais arrivé à la conclusion que c'était ce qui devait se passer. Appelez-vous toujours doc.Clear () à la fin du bloc using?

Je n'ai jamais vu cette erreur auparavant, mais nous avons eu des problèmes de mémoire avec ABC PDF auparavant.

En résumé, ce n’est PAS une base de code entièrement gérée, mais simplement un wrapper .NET autour de leur version COM. Cela étant dit, nous avons expliqué que notre problème d’utilisation de la mémoire était de ne pas disposer correctement de leurs objets.

Donc, au lieu de:


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

faire ceci:


    Dim doc as Doc
    Using doc As New Doc()
      'etc...
    End Using
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top