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 类实例,可能会导致代码内存泄漏。

  • System.IO.Stream - 由 PdfDocument.Stream 属性返回
  • System.Drawing.Image / System.Drawing.Bitmap - 由 PdfDocument.PageToBitmap 方法返回

  • IronPdf.PdfDocument - 本身也被标记为 iDisposable,因为它可能包含在我们以后的 2021 - 2024 版本中的非托管对象。

最常见的解决方案

最好的解决办法通常是在引用 iDisposable 对象时使用 using statement 语句。

使用(var stream=myPdfDocument.Stream){// do stuff}`

在 C# 8 中,甚至有一个速记版本,不带 {} 关闭

使用 var stream=myPdfDocument.Stream;``

3.收集垃圾

即使没有任何问题,Visual Studio 调试器的内存剖析器也可能会不断上升。当使用高内存系统时,.NET 运行时可能会认为,让垃圾在内存中停留直到系统内存几乎满了,或者甚至使用交换文件来保留内存会更有效率。

在应用程序生命周期的某个安全点,可以手动指示.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()
VB   C#

在此之后,内存使用曲线图应该会下降到正常水平,但不会为零。

4.如果您仍有内存泄漏问题 - 请报告。这将被视为极其重要的优先事项

请阅读本指南,它将指导您如何查找日志文件,并以无需要求提供其他信息的方式进行报告。

这 3 分钟的阅读将帮助我们 100% 准确地重现您的问题,从而避免浪费您的时间。

https://ironpdf.com/troubleshooting/engineering-request-pdf/

感谢您 - 没有人喜欢内存泄漏,包括我们自己。在处理 HTML 渲染、互操作、图形和数据流等 "低级 "或系统对象时,确实有可能出现内存泄漏。因此,我们要解决这些问题!

IronPDF 之所以能取得今天的成就,离不开我们对用户错误报告和功能请求的倾听,因此感谢您的支持。