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

Roh*_*han 13 c# wpf

是否真的如果我使用以下内容,它将需要更少的资源,清理会更快?

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

相比于:

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

Cod*_*aos 25

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

表格的使用声明:

using (ResourceType resource = expression) embedded-statement 
Run Code Online (Sandbox Code Playgroud)

对应扩展:

{ 
   ResourceType resource = expression; 
   try {     
     embedded-statement 
   } 
   finally { 
     // Dispose of resource 
   } 
}
Run Code Online (Sandbox Code Playgroud)

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

finally {  
  if (resource != null) ((System.IDisposable)resource).Dispose(); 
}
Run Code Online (Sandbox Code Playgroud)

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


你也不需要同时调用CloseDispose.这些功能是等效的.


Jus*_*tin 7

第一个样本是简写的:

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

它不是更快,readLogs它将被清理,即使发生在你的第二个例子中不会发生的异常.

有关更多信息,请参阅使用Statement(C#参考).

没有必要同时调用它们,Close并且在Dispose内部Close方法执行与方法相同的工作Dispose(它刚刚重命名,因为开发人员习惯于调用方法Close).


更新:也有叫没有什么区别File.OpenTextnew StreamReader-内部File.OpenText刚刚创建并返回的新实例StreamReader.