我正在.net
处理一些图像处理脚本,并且遇到了following article概述如何裁剪,调整大小,压缩等等。
在first comment中,有人说文章中用于成像的方法因内存泄漏而臭名昭着:
快速警告每个人都在考虑使用System.Drawing(或 GDI +)在ASP.NET环境中。它并不支持Microsoft和 MSDN(截至最近)明确指出您可能会遇到记忆 泄漏。
然后,在第二条评论中,文章作者有效地说"我已经处理了这个问题":
只是为了弄清楚上面的代码并没有被抛在一起。它进化了 随着时间的推移,因为你的建议很容易错误地创建 使用GDI +时的性能问题。 看看我有多少次 书面&#39;使用&#39;上述<!/强>
我想知道using
如何(或者是否)有效地处理(或改进)第一条评论中引用的内存泄漏问题。
答案 0 :(得分:8)
using
语句不能任何表现。它所做的是在声明Dispose
的对象上调用using
方法。
调用Dispose
将允许非托管资源(如GDI +为您的图像操作创建的资源)进行未分配。这将释放内存和Windows句柄。两者都可以帮助您的应用程序停止正常工作,因为如果内存或句柄耗尽,您的程序将无法运行。
using
语句实际上等同于(并最终编译):
var x = ...; // code from using intialization
try
{
... // code inside using statement
}
finally
{
((IDisposable)x).Dispose();
}
这确保即使发生异常也会处置对象。