IronPDFのメモリリークを修正する
IronPDFで明らかなメモリリークが発生している場合は、私たちに知らせてください。 最も経験豊富なエンジニアが、特定され次第、メモリリークに対応するためホットフィックスに取り組みます。
このようにしてメモリリークをsupport@ironsoftware.comに報告します。
1. 最新のIronPdfバージョンに更新する
まだの場合は、最新のIronPdfバージョンに更新してください。
2. IDisposable オブジェクトが破棄されていることを確認する
報告されているメモリ リークの大部分は、 .NET IDisposable インターフェイスの不適切な使用によって発生します。
.NETクラスに Dispose() メソッドがある場合、そのメソッドはおそらく IDisposable であり、開発者は使用を終了したときにそれを通知する必要があります。
C#は"管理された"言語であり、メモリ管理に開発者の責任は必要ないという誤解があります。 この信念に反して、多くの一般的な.NETオブジェクトが破棄されずに放置されています。
各 IDisposable クラスインスタンスを手動で破棄しないと、コード内でメモリ リークが発生する可能性があります。
- System.IO.Stream -
PdfDocument.Streamプロパティによって返されます。 - System.Drawing.Image / System.Drawing.Bitmap -
PdfDocument.PageToBitmapメソッドによって返されます。 - IronPdf.PdfDocument - 自体も、2021 - 2024 年後半のリリースで管理されていないオブジェクトが含まれる可能性があるため、
IDisposableとしてマークされています。
最も一般的な解決策
多くの場合、最善の解決策は、IDisposable オブジェクトを参照するときに using ステートメントを使用することです
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
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
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
この後、メモリ使用量グラフは正常なレベル(ゼロではないが)に戻るはずです。
4. まだメモリーリークがある場合 - 報告してください
これは非常に高い優先度として扱われます。 ログファイルの見つけ方と追加情報を求められることなく問題を報告する方法を説明するこのガイドをお読みください。
これを3分間読むことで、問題を100%正確に再現するのに役立ち、時間を無駄にすることはありません。
ありがとうございます - 誰もメモリリークが好きではなく、私たちも同様です。 HTMLレンダリング、Interop、Graphics、Streamsのような"低レベル"またはシステムオブジェクトを扱う場合、これらは発生する可能性があります。 だから、それらを修正しましょう!
IronPDFは、ユーザーからのバグレポートや機能リクエストを聞いてきたことで、現在の形になりましたので、ご支援に感謝します。

