Behebung von Speicherlecks in IronPDF
Wenn Sie ein scheinbares Speicherleck in IronPDF feststellen, möchten wir davon erfahren. Unsere Ingenieure arbeiten an einem Hotfix, sobald ein Speicherleck erkannt wird.
So melden Sie ein Speicherleck an support@ironsoftware.com :
1. Aktualisieren Sie auf die neueste IronPDF-Version
Wenn Sie es noch nicht getan haben, bitte aktualisieren Sie auf die neueste IronPDF-Version.
2. Stellen Sie sicher, dass Sie Ihre IDisposable Objekte entsorgt haben
Die überwiegende Mehrheit der gemeldeten Speicherlecks wird durch unsachgemäßen Gebrauch der .NET IDisposable-Schnittstelle verursacht.
Wenn eine .NET-Klasse eine Dispose()-Methode hat - ist sie wahrscheinlich IDisposable und erfordert vom Entwickler, ihr mitzuteilen, wann sie mit ihrer Verwendung fertig ist.
Es gibt ein weit verbreitetes Missverständnis, dass C# eine "verwaltete" Sprache ist, die keine Verantwortung des Entwicklers zur Speicherverwaltung erfordert. Im Gegensatz zu diesem Glauben gibt es tatsächlich viele gemeinsame .NET-Objekte, die Entwickler versäumen freizugeben.
- Verwenden von Objekten, die IDisposable implementieren
- Finden, Beheben und Vermeiden von Speicherlecks in C# .NET: 8 Best Practices
Wenn Sie es versäumen, jede IDisposable-Klasseninstanz manuell zu entsorgen, kann dies zu einem Speicherleck in Ihrem Code führen.
- System.IO.Stream - das durch die
PdfDocument.Stream-Eigenschaft zurückgegeben wird. - System.Drawing.Image / System.Drawing.Bitmap - das durch die
PdfDocument.PageToBitmap-Methode zurückgegeben wird. - IronPdf.PdfDocument - selbst als
IDisposablegekennzeichnet, da es in unseren späteren Versionen 2021 - 2024 nicht verwaltete Objekte enthalten kann.
Die häufigste Lösung
Die beste Lösung ist oft, eine using-Anweisung zu verwenden, wenn auf IDisposable-Objekte Bezug genommen wird.
using(var stream = myPdfDocument.Stream) {
// Perform operations with the stream here
}Using stream = myPdfDocument.Stream
' Perform operations with the stream here
End UsingUsing stream = myPdfDocument.Stream
' Perform operations with the stream here
End UsingIn C# 8 gibt es sogar eine abgekürzte Version ohne {}-Schließungen.
using var stream = myPdfDocument.Stream;
// Perform operations with the stream hereusing var stream = myPdfDocument.Stream;
// Perform operations with the stream hereDim stream = myPdfDocument.Stream
' Perform operations with the stream hereDim stream = myPdfDocument.Stream
' Perform operations with the stream here3. Müll sammeln
Der Memory Profiler des Visual Studio-Debuggers kann weiter speicherzuwachs anzeigen, selbst wenn nichts falsch ist. Beim Verwenden eines Systems mit hohem RAM kann die .NET-Laufzeit entscheiden, dass es effizienter ist, den Müll im Speicher zu belassen, bis Ihr Systemspeicher fast voll ist oder sogar eine Auslagerungsdatei zu verwenden.
Es ist möglich, den .NET-Garbage-Collector manuell anzuweisen, ungenutzte Objekte zu einem sicheren Zeitpunkt im Lebenszyklus Ihrer Anwendung zu entsorgen, wenn:
- Kein PDF gerendert wird
- Ein
IDisposable-Objekt ist offen
Eine Möglichkeit, dies zu tun, ist:
System.GC.Collect(); // Invokes the garbage collector
System.GC.WaitForPendingFinalizers(); // Waits for the process to complete
System.GC.Collect(); // Optional: Runs additional collection to ensure all objects are clearedSystem.GC.Collect(); // Invokes the garbage collector
System.GC.WaitForPendingFinalizers(); // Waits for the process to complete
System.GC.Collect(); // Optional: Runs additional collection to ensure all objects are clearedSystem.GC.Collect() ' Invokes the garbage collector
System.GC.WaitForPendingFinalizers() ' Waits for the process to complete
System.GC.Collect() ' Optional: Runs additional collection to ensure all objects are clearedSystem.GC.Collect() ' Invokes the garbage collector
System.GC.WaitForPendingFinalizers() ' Waits for the process to complete
System.GC.Collect() ' Optional: Runs additional collection to ensure all objects are clearedNach diesem Vorgang sollte der Graf von der Speichernutzung auf ein normales, aber nicht null Niveau sinken.
4. Wenn Sie immer noch ein Speicherleck haben - Melden Sie es
Dies wird als extrem hohe Priorität respektiert. Bitte lesen Sie diesen Leitfaden, der erklärt, wie Sie Ihre Protokolldateien finden und Ihr Problem auf eine Weise melden, dass keine zusätzlichen Informationen angefordert werden.
Dieser 3-minütige Lesedurchgang hilft uns, Ihr Problem mit 100%iger Genauigkeit nachzustellen, sodass wir Ihre Zeit nicht verschwenden.
Anfrage an die Technik als PDF
Vielen Dank - Niemand mag Speicherlecks, auch wir nicht. Wenn Sie mit "niedrigstufigen" oder Systemobjekten wie HTML-Rendering, Interop, Grafiken und Streams arbeiten, werden sie möglich. Also lassen Sie uns sie beheben!
IronPDF ist nur das geworden, was es heute ist, weil wir auf die Fehlerberichte und Funktionswünsche unserer Benutzer gehört haben, also danke für Ihre Unterstützung.
Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender Handbücher.