"如何使用"关键字提高性能(内存或速度)

时间:2016-01-28 14:09:00

标签: c# asp.net .net image-processing memory-leaks

我正在.net处理一些图像处理脚本,并且遇到了following article概述如何裁剪,调整大小,压缩等等。

first comment中,有人说文章中用于成像的方法因内存泄漏而臭名昭着:

  

快速警告每个人都在考虑使用System.Drawing(或   GDI +)在ASP.NET环境中。它并不支持Microsoft和   MSDN(截至最近)明确指出您可能会遇到记忆   泄漏。

然后,在第二条评论中,文章作者有效地说"我已经处理了这个问题":

  

只是为了弄清楚上面的代码并没有被抛在一起。它进化了   随着时间的推移,因为你的建议很容易错误地创建   使用GDI +时的性能问题。 看看我有多少次   书面&#39;使用&#39;上述<!/强>

我想知道using如何(或者是否)有效地处理(或改进)第一条评论中引用的内存泄漏问题。

1 个答案:

答案 0 :(得分:8)

using语句不能任何表现。它所做的是在声明Dispose的对象上调用using方法。

调用Dispose将允许非托管资源(如GDI +为您的图像操作创建的资源)进行未分配。这将释放内存和Windows句柄。两者都可以帮助您的应用程序停止正常工作,因为如果内存或句柄耗尽,您的程序将无法运行。

using语句实际上等同于(并最终编译):

var x = ...; // code from using intialization
try
{
    ... // code inside using statement
}
finally
{
    ((IDisposable)x).Dispose();
}

这确保即使发生异常也会处置对象。