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のクラスにIDisposableであり、開発者はその使用を終了した際に明示的に通知する必要があります。

C#は"管理された"言語であり、メモリ管理に開発者の責任は必要ないという誤解があります。 この信念に反して、多くの一般的な.NETオブジェクトが破棄されずに放置されています。

IDisposable クラスのインスタンスを手動で破棄しないと、コード内でメモリリークが発生する可能性があります。

  • System.IO.Stream - PdfDocument.Stream プロパティによって返されるもの。
  • System.Drawing.Image / System.Drawing.Bitmap - PdfDocument.PageToBitmap メソッドによって返されるもの。
  • IronPdf.PdfDocument - これ自体も IDisposable とマークされています。これは、2021年から2024年にかけての今後のリリースにおいて、非管理オブジェクトを含む可能性があるためです。

最も一般的な解決策

using オブジェクトを参照する際は、IDisposable ステートメントを使用するのが最適な解決策となる場合が多いです

using(var stream = myPdfDocument.Stream) {
    // Perform operations with the stream here
}
using(var stream = myPdfDocument.Stream) {
    // Perform operations with the stream here
}
Using stream = myPdfDocument.Stream
	' Perform operations with the stream here
End Using
$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
Dim stream = myPdfDocument.Stream
' Perform operations with the stream here
$vbLabelText   $csharpLabel

3. ガベージコレクションを実行する

Visual Studioデバッガーのメモリプロファイラーは、問題がない場合でも増加を示し続ける可能性があります。 高RAMシステムを使用する際、.NETランタイムは、システムRAMがほぼ満杯になるまで、またはスワップファイルを使用して、メモリにガベージを維持する方が効率的と判断する場合があります。

アプリケーションライフサイクルの安全なポイントで.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
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%正確に再現するのに役立ち、時間を無駄にすることはありません。

Engineering Request PDF

ありがとうございます - 誰もメモリリークが好きではなく、私たちも同様です。 HTMLレンダリング、Interop、Graphics、Streamsのような"低レベル"またはシステムオブジェクトを扱う場合、これらは発生する可能性があります。 だから、それらを修正しましょう!

IronPDFは、ユーザーからのバグレポートや機能リクエストを聞いてきたことで、現在の形になりましたので、ご支援に感謝します。

カーティス・チャウ
テクニカルライター

Curtis Chauは、カールトン大学でコンピュータサイエンスの学士号を取得し、Node.js、TypeScript、JavaScript、およびReactに精通したフロントエンド開発を専門としています。直感的で美しいユーザーインターフェースを作成することに情熱を持ち、Curtisは現代のフレームワークを用いた開発や、構造の良い視覚的に魅力的なマニュアルの作成を楽しんでいます。

開発以外にも、CurtisはIoT(Internet of Things)への強い関心を持ち、ハードウェアとソフトウェアの統合方法を模索しています。余暇には、ゲームをしたりDiscordボットを作成したりして、技術に対する愛情と創造性を組み合わせています。

準備はできましたか?
Nuget ダウンロード 19,014,616 | バージョン: 2026.5 just released
Still Scrolling Icon

まだスクロールしていますか?

すぐに証拠が欲しいですか? PM > Install-Package IronPdf
サンプルを実行するHTML が PDF に変換されるのを確認します。