Domanda

Il progetto su cui sto lavorando utilizza un componente di terze parti per creare PDF dinamici in un sistema Web VB.Net chiamato ABCpdf.Net. (non uno strumento terribile, ma neanche eccezionale.)

Di tanto in tanto, per motivi che non riesco a capire, l'oggetto documento genera un'eccezione SEHE. Scavando ulteriormente, si scopre che ciò è causato da un'eccezione personalizzata nell'oggetto documento del tipo WebSupergoo.ABCpdf6.Internal.PDFException. Il contenuto contiene solo il titolo non molto utile " Impossibile ottenere i dati di immagine. Memoria esaurita " Di solito questo accade quando si tenta di aggiungere un'immagine al PDF. Dal momento che queste immagini sono PNG inferiori a 100k, immagino che la loro dimensione non sia il problema.

Inoltre, la cosa davvero strana è che una volta che questo problema inizia ad accadere, l'unico modo per risolverlo sembra essere il riavvio del server Web, che è chiaramente un po 'scadente.

Qualcuno ha mai avuto questo problema (o addirittura utilizzato questo strumento?)

È stato utile?

Soluzione 2

Aggiornamento, tre mesi dopo:

Per quanto posso dire, i problemi di memoria sono stati tutti risolti quando abbiamo aggiornato da ABCpdf 6 a 7. Sembrerebbe che la versione 7 non sia più un oggetto COM con un wrapper .NET, ma tutto il codice gestito dal basso su. Non è ancora il più grande generatore di PDF là fuori, ma i problemi di smaltimento delle risorse sembrano essere stati risolti.

Altri suggerimenti

affascinante. Ero giunto alla conclusione che era quello che doveva succedere. Chiamate ancora doc.Clear () alla fine del blocco using?

Non ho visto specificamente questo errore prima, ma prima abbiamo riscontrato problemi di memoria con ABC PDF.

Per farla breve, NON è una base di codice completamente gestita, ma semplicemente un wrapper .NET attorno alla loro versione COM. Detto questo, abbiamo rintracciato il nostro problema di utilizzo della memoria per non smaltire correttamente i loro oggetti.

Quindi, invece di:


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

fai questo:


    Dim doc as Doc
    Using doc As New Doc()
      'etc...
    End Using
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top