【问题标题】:How the "using" keyword Improves Performance (memory or speed wise)“使用”关键字如何提高性能(内存或速度方面)
【发布时间】:2016-05-05 23:07:05
【问题描述】:

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

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

对所有考虑使用 System.Drawing(或 GDI+) 在 ASP.NET 环境中。它不受 Microsoft 支持,并且 MSDN(截至最近)明确指出您可能会遇到记忆 泄漏。

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

只是为了说明上面的代码没有放在一起。它进化了 随着时间的推移,因为正如您所建议的那样,错误地创建太容易了 使用 GDI+ 时的性能问题。 看看我有多少次 上面写着“使用”!

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

【问题讨论】:

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


【解决方案1】:

using 语句在性能方面并没有任何作用。它所做的是在声明了using 的对象上调用Dispose 方法。

调用Dispose 将允许未分配非托管资源,例如 GDI+ 为您的图像操作创建的那些资源。这将释放内存和 Windows 句柄。两者都可能导致您的应用程序停止正常工作,因为如果您的内存或句柄用完,您的程序将无法运行。

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

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

这确保对象被释放,即使发生异常。

【讨论】:

  • 只是在这里添加一些东西。 using 语句将在编译时将您的代码包装在 try/finally 中,并在 finally 块中调用 dispose。
  • @Botonomous - 这很好,对吧?因为即使块内的某些东西在执行过程中失败,资源也会被释放,对吗?
  • @Botonomous 确实如此。对此进行了扩展。
猜你喜欢
  • 2017-05-22
  • 2012-06-30
  • 1970-01-01
  • 2016-01-10
  • 2022-06-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-25
  • 2019-11-15
相关资源
最近更新 更多