AccessViolationException Bei Formulaverarbeitung (c0000005)
Während der Verarbeitung von PDF-Formularen kann IronPDF eine gelegentliche einheimische AccessViolationException (Code c0000005) werfen, die sich nicht zuverlässig reproduzieren lässt, selbst bei derselben Eingabedatei. Sie tritt am häufigsten auf, wenn Sie auf PdfDocument.Form zugreifen und während PdfDocument.Flatten und PdfDocument.Merge.
AccessViolationException (0xc0000005)
bad conversion while widening narrow string
Der Absturz kommt von der Interaktion zwischen nativen Formular-Feld-Handles und verwalteter Objektlebensdauer. Wenn die PdfDocument Müll gesammelt oder entsorgt wird, während nativen Formularoperationen noch im Gange sind, greift die native Schicht auf Speicher zu, der bereits freigegeben wurde, was die Zugriffsverletzung produziert.
Die wiederholten "schlechte Konvertierung beim Erweitern von schmalen Zeichenfolgen"-Warnungen sowie Warnungen über das Entfernen von Formularfeld-Anmerkungen während der Flachstellung sind ein separates und harmloses Symptom. Sie stammen aus der Dekodierung von internen AcroForm-Feldzeichenfolgen und Metadaten, die japanische oder Multibyte-Zeichen in einem gegebenen PDF enthalten. Sie deuten nicht auf ein Problem mit japanischer oder allgemeiner Unicode-Unterstützung hin, noch mit japanischen UNC-Dateipfaden.
Lösung
1. Halten Sie das Dokument für die gesamte Operation am Leben
Empfohlen: halten Sie die PdfDocument im Umfang für die gesamte Dauer der Formularverarbeitung. Wickeln Sie es in einen Using-Block, sodass die Lebensdauer explizit wird, und rufen Sie anschließend GC.KeepAlive(doc) nach der Formularfeld-Schleife auf, bevor das Dokument entsorgt wird.
Using doc As IronPdf.PdfDocument = IronPdf.PdfDocument.FromFile(tempPdfPath)
For Each field In doc.Form
' Your form field processing here
Next
GC.KeepAlive(doc)
End Using
Using doc As IronPdf.PdfDocument = IronPdf.PdfDocument.FromFile(tempPdfPath)
For Each field In doc.Form
' Your form field processing here
Next
GC.KeepAlive(doc)
End Using
GC.KeepAlive(doc) stoppt die Laufzeit davon, das Dokument zu sammeln, während native Formularoperationen noch ausgeführt werden, und schließt das Fenster, in dem der native Code auf freigegebenen Speicher zugreifen kann.
2. Entfernen Sie manuelle GC.Collect() Aufrufe
Löschen Sie alle GC.Collect() Aufrufe während der PDF- und Formularverarbeitung. Das Erzwingen der Sammlung mitten in der Operation kann genau das Lebensdauerproblem auslösen, das den Absturz verursacht.
3. Nur x64 anvisieren
Setzen Sie das Projektplattformziel explizit auf x64 und stellen Sie sicher, dass Bevorzugt 32-Bit deaktiviert ist. Das Ausführen als x64 vermeidet die Einschränkungen eines 32-Bit-Prozesses während der nativen Formulararbeit.

