【发布时间】:2016-05-05 23:07:05
【问题描述】:
我正在.net 中处理一些图像处理脚本,遇到了following article 概述了如何裁剪、调整大小、压缩等。
在first comment 中,有人指出文章中用于成像的方法因内存泄漏而臭名昭著:
对所有考虑使用 System.Drawing(或 GDI+) 在 ASP.NET 环境中。它不受 Microsoft 支持,并且 MSDN(截至最近)明确指出您可能会遇到记忆 泄漏。
然后,在第二条评论中,文章作者有效地说“我已经处理了那个问题”:
只是为了说明上面的代码没有放在一起。它进化了 随着时间的推移,因为正如您所建议的那样,错误地创建太容易了 使用 GDI+ 时的性能问题。 看看我有多少次 上面写着“使用”!
我想知道using 的使用如何(或是否)有效地处理(或改进)第一条评论中提到的内存泄漏问题。
【问题讨论】:
-
使用
using,在内部代码块执行结束时,using中声明的对象将被自动释放 -
GDI+ 是原生的;没有引用计数,因此存在内存泄漏的风险。内存泄漏的范围不仅限于“ASP.NET”,而是整个Windows 服务 和IIS是 服务。 "GDI+ functions and classes are not supported for use within a Windows service. Attempting to use these functions and classes from a Windows service may produce unexpected problems, such as diminished service performance and run-time exceptions or errors."
-
我并不是说要“改变 [从 GDI+]”。我是说您可能需要检查您的代码是否正确释放了 GDI+ 资源。 WinForms 应用程序在后台使用 GDI+ 来处理字体和画笔等内容。它们也必须正确释放。 stackoverflow.com/questions/9723470/…
-
那些确实是经常被遗忘的内存泄漏@Micky
标签: c# asp.net .net image-processing memory-leaks