修復 IronPDF 中的記憶體洩漏
如果您在使用 IronPDF 時遇到明顯的內存泄漏問題,我們希望得知此情況。 我們最資深的工程師一旦發現記憶體洩漏,將會迅速集中力量進行熱修復。
以下是如何向 support@ironsoftware.com 報告記憶體洩漏的方法:
1. 更新至最新的 IronPdf 版本
如果您尚未更新,請升級到最新的IronPdf版本。
2. 確保您已處理您的 iDisposable 物件
大多數報告的記憶體洩漏是由於不當使用 .NET iDisposable 介面造成的。
如果任何 .NET 類別具有 Dispose() 方法 - 可能是 iDisposable 並且需要開發人員告訴它他們何時完成使用。
有一個常見的誤解認為 C# 是一種「管理式」語言,不需要開發者負責管理記憶體。 與這種信念相反,事實上有許多常見的 .NET 對象,開發人員未意識到未處理。
- 使用實作 IDisposable 的物件
如果您未手動處理每一個 iDisposable 類別實例,可能會在您的代碼中造成內存洩漏。
- System.IO.Stream - 由 PdfDocument.Stream 屬性返回
- System.Drawing.Image / System.Drawing.Bitmap - 由 PdfDocument.PageToBitmap 方法返回
- IronPdf.PdfDocument - 本身也被標記為 iDisposable,因為在我們 2021 年至 2024 年之後的版本中可能包含非託管物件。
最常見的解決方案
最佳解決方案通常是在引用 iDisposable 物件時使用 using 語句。
using(var stream=myPdfDocument.Stream){// 執行操作}
在C# 8中,甚至可以使用簡寫版本而不需要{}閉包
using var stream=myPdfDocument.Stream;
3.收集垃圾
即使沒有任何問題,Visual Studio 調試器記憶體分析器的使用量可能會持續上升。 在使用高RAM系統時,.NET運行時可能會認為讓垃圾在記憶體中停留,直到系統RAM接近滿載,甚至使用交換文件來保持,這樣更有效。
可以在應用程式生命週期的安全時機手動指示 .NET 垃圾收集器處理其未使用的對象:
- 無法渲染PDF
- 有一個 iDisposable 物件開啟中。
一種方法是這樣做
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.GC.Collect();
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.GC.Collect();
System.GC.Collect()
System.GC.WaitForPendingFinalizers()
System.GC.Collect()
之後,記憶體使用情況圖表應該會下降到正常但非零的水平。
4. 如果您仍然有記憶體洩漏 - 請報告。
這將被視為非常高的優先級。
請閱讀本指南,其中指導如何查找您的日誌文件並進行報告,以便無需再請求額外的信息。
這篇3分鐘的閱讀將幫助我們百分之百準確地重現您的問題,這樣我們就不會浪費您的時間。
故障排除中的工程請求 PDF](
謝謝 - 沒有人喜歡記憶體洩漏,包括我們。 在處理「低階」或系統物件,如HTML渲染、互操作、圖形和流時,它們確實成為可能。 那就讓我們來解決它們吧!
IronPDF之所以能成為今天的模樣,全賴於聽取了用戶的錯誤報告和功能請求,因此感謝您的支持。