使用关键字占用的空间更少

时间:2011-11-08 10:19:51

标签: c# wpf

如果我使用以下内容,它会花费更少的资源,清理会更快吗?

 using (TextReader readLogs = File.OpenText("C:\\FlashAuto\\Temp\\log.txt"))
 {
      //my stuff
 }

与:相比:

 TextReader readLogs = new StreamReader("C:\\FlashAuto\\Temp\\log.txt");
 //my stuff
readLogs.Close();
readLogs.Dispose();

2 个答案:

答案 0 :(得分:25)

这些示例之间的区别不在于性能,而在于异常安全性。 using在后​​台创建了一个try...finally块。

  

表格的使用声明:

using (ResourceType resource = expression) embedded-statement 
     

对应于扩展:

{ 
   ResourceType resource = expression; 
   try {     
     embedded-statement 
   } 
   finally { 
     // Dispose of resource 
   } 
}

对于参考类型,处理通过以下方式进行:

finally {  
  if (resource != null) ((System.IDisposable)resource).Dispose(); 
}

来自ECMA-344 C#语言规范第4版


您也无需同时拨打CloseDispose。这些功能是等效的。

答案 1 :(得分:7)

第一个样本是简写的:

TextReader readLogs = File.OpenText("C:\\FlashAuto\\Temp\\log.txt");
try
{
    // My stuff
}
finally
{
    if (readLogs != null)
    {
        ((IDisposable)readLogs).Dispose();
    }
}

它的速度并不快,即使发生了一个在第二个例子中不会发生的异常,它也会被清除readLogs

有关详细信息,请参阅using Statement (C# Reference)

无需同时调用CloseDisposeClose方法在内部执行与Dispose方法相同的工作(由于使用了开发人员,因此重新命名有一个名为Close)的方法。


更新:调用File.OpenTextnew StreamReader之间也没有区别 - 内部File.OpenText只是创建并返回StreamReader的新实例