Frage

Das Projekt, das ich bin auf eine 3rd-Party-Komponente mit dynamischen PDF-Dateien in einem VB.Net Websystem ABCpdf.Net genannt zu bauen. (Keine schreckliches Werkzeug, aber keine großen entweder.)

Hie und da aus Gründen wir nicht ergründen können, wirft das Dokument-Objekt ein SEHException. Graben weitere, stellt sich heraus, dies durch eine benutzerdefinierte Ausnahme in dem Dokument-Objekt des Typs WebSupergoo.ABCpdf6.Internal.PDFException verursacht wird. Der Inhalt enthält nur die nicht -terribly-hilfreich Titel „Können Bilddaten erhalten. Out Of Memory“ Normalerweise ist dies geschieht, wenn man versucht, ein Bild der PDF hinzuzufügen. Da diese Bilder PNGs von weniger als 100k sind, vermute ich ihre Größe ist nicht das Problem.

Auch die wirklich Merkwürdige ist, dass, wenn dieses Problem geschieht beginnt, ist der einzige Weg, es zu stoppen zu bekommen scheint auf den Webserver zu sein neu zu starten, die eindeutig ein wenig unterdurchscnittlich ist.

Hat jemand schon einmal dieses Problem hat (oder sogar dieses Tool verwendet?)

War es hilfreich?

Lösung 2

Update, drei Monate später:

So nahe, wie ich sagen kann, die Speicherprobleme alle gelöst wurden, wenn wir von ABCpdf 6 bis 7 aufgerüstet würde es scheinen, dass Version 7 ist nicht länger ein COM-Objekt mit einem .NET-Wrapper, aber die gesamten Code von unten verwaltet Nach oben. Es ist immer noch nicht der größte PDF-Generator gibt, aber die Ressource Entsorgungsprobleme scheinen gelöst zu sein.

Andere Tipps

Faszinierend. Ich hatte zu dem Schluss gekommen, dass das, was vor sich gehen muss. Haben Sie noch die doc.Clear () aufrufen, am Ende des using-Blocks?

Ich habe diesen Fehler nicht ausdrücklich vorher gesehen, aber wir haben vor mit ABC PDF Speicherprobleme haben.

Lange Rede kurzer Sinn ist, dass es nicht eine vollständig verwaltete Code-Basis ist, sondern einfach eine .NET-Wrapper um ihre COM-Version. Davon abgesehen, wir unsere Speichernutzung Problem zurückzuführen nicht richtig ihre Gegenstände zu entsorgen.

Also, statt:


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

Sie folgendermaßen vor:


    Dim doc as Doc
    Using doc As New Doc()
      'etc...
    End Using
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top