是否真的如果我使用以下内容,它将需要更少的资源,清理会更快?
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块.
表格的使用声明:
Run Code Online (Sandbox Code Playgroud)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(); }
来自ECMA-344 C#语言规范第4版
你也不需要同时调用Close和Dispose.这些功能是等效的.
第一个样本是简写的:
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.OpenText和new StreamReader-内部File.OpenText刚刚创建并返回的新实例StreamReader.
| 归档时间: |
|
| 查看次数: |
352 次 |
| 最近记录: |