修復 IronPDF 中的記憶體洩漏

This article was translated from English: Does it need improvement?
Translated
View the article in English

如果您在使用 IronPDF 時遇到明顯的記憶體洩漏問題,請告知我們。 一旦發現記憶體洩漏問題,我們資歷最深的工程師會立即集中精力進行緊急修復。

以下是如何向系統報告記憶體洩漏的方法support@ironsoftware.com

1. 更新至最新 IronPdf 版本

如果您尚未更新,請更新至最新版本的 IronPdf。

2. 請確保已妥善處理IDisposable物品

絕大多數已報告的記憶體洩漏都是由於 .NET IDisposable介面使用不當造成的。

如果任何 .NET 類別具有Dispose()方法,則它很可能是IDisposable ,並且需要開發人員在使用完畢後告知它。

人們普遍誤解 C# 是一種"託管"語言,不需要開發人員負責管理記憶體。 與這種觀點相反,實際上有許多常見的 .NET 物件開發人員未能將其釋放。

-使用實作了 IDisposable 介面的對象 -尋找、修復和避免 C# .NET 中的記憶體洩漏:8 個最佳實踐

如果未能手動釋放每個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) {
    // Perform operations with the stream here
}
using(var stream = myPdfDocument.Stream) {
    // Perform operations with the stream here
}
$vbLabelText   $csharpLabel

在 C# 8 中,甚至還有一個不使用{}閉包的簡寫版本。

using var stream = myPdfDocument.Stream;
// Perform operations with the stream here
using var stream = myPdfDocument.Stream;
// Perform operations with the stream here
$vbLabelText   $csharpLabel

3. 收集垃圾

即使沒有任何問題,Visual Studio 偵錯器記憶體分析器也可能持續顯示記憶體增加。 當使用高記憶體系統時,.NET 運行時可能會認為,讓垃圾資料留在記憶體中,直到系統記憶體幾乎用完,甚至使用交換檔案來保存,效率會更高。

在應用程式生命週期中,可以在安全的時間點手動指示 .NET 垃圾回收器釋放未使用的物件:

  • 無法渲染 PDF 文件
  • 一個IDisposable物件處於開啟狀態

實現這一目標的一種方法是:

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 cleared
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 cleared
$vbLabelText   $csharpLabel

此後,記憶體使用率圖表應該會下降到正常但非零的水平。

4. 如果仍有記憶體洩漏問題,請提交報告。

我們將把此事視為極為重要的優先事項。 請閱讀本指南,其中解釋瞭如何查找日誌檔案以及如何報告問題,以便無需提供其他資訊。

請花 3 分鐘閱讀此文,以便我們 100% 準確地重現您的問題,確保不會浪費您的時間。

工程申請 PDF

謝謝——沒有人喜歡內存洩漏,包括我們自己。 當使用 HTML 渲染、互通、圖形和流等"底層"或系統物件時,這些功能就成為可能。 所以讓我們來解決它們!

IronPDF 能發展到今天的規模,全賴我們聽用戶的錯誤回報和功能請求,所以非常感謝大家的支持。

柯蒂斯·週
技術撰稿人

Curtis Chau擁有卡爾頓大學電腦科學學士學位,專長於前端開發,精通Node.js、TypeScript、JavaScript和React。他熱衷於打造直覺美觀的使用者介面,喜歡使用現代框架,並擅長撰寫結構清晰、視覺效果出色的使用者手冊。

除了開發工作之外,柯蒂斯對物聯網 (IoT) 也抱有濃厚的興趣,致力於探索硬體和軟體整合的創新方法。閒暇時,他喜歡玩遊戲和製作 Discord 機器人,將他對科技的熱愛與創造力結合。

準備好開始了嗎?
Nuget 下載 17,012,929 | 版本: 2025.12 剛剛發布