【发布时间】:2011-04-03 10:05:05
【问题描述】:
在处理完一个对象后,使用指令或处置指令哪个更好?
using(FileStream fileStream = new FileStream(
"logs/myapp.log",
FileMode.Open,
FileAccess.Read,
FileShare.ReadWrite))
{
using(StreamReader streamReader = new StreamReader(fileStream))
{
this.textBoxLogs.Text = streamReader.ReadToEnd();
}
}
另一方面,当我处理 System.Net.Mail 时,我被告知我需要对对象进行 Dispose() 以释放任何杂散锁。
有没有一致的指导?如何判断在给定情况下对于给定对象什么更合适?
【问题讨论】:
-
CDO 已经过时了。微软可以让人们停止使用它的唯一方法是不撤回对它的任何支持。你自己一个人,即使在这里我估计。
-
@Hans Passant - 即使如此,.NET Framework 在下面使用 COM。 System.Web.Mail 实际上在 AFIK 内部使用了 CDO。也许在我每天使用的对象中潜伏着其他类似的 COM 对象。
-
将一个过时的组件换成另一个是没有意义的。使用 System.Net.Mail
-
我只是想强调需要处理一个可能是底层 COM 的 .NET 对象,而不是讨论可支持性主题。在仍受支持的情况下,最佳做法是什么?
-
请注意,
StreamReader将在处置时处置其基本流。在您的示例代码中,如果您在streamReader的using块之后,但在fileStreamusing块结束之前使用fileStream,您将得到一个ObjectDisposedException。
标签: c# .net com dispose using-statement