c# - 对已实例化的对象使用 using 语句

标签 c# using-statement

我的应用程序中有一个非常简单的日志记录机制,它定期将一行写入文件(日志库对我的需求来说太过分了),看起来像这样:

private string logfile = @"C:\whatever.log";

public void WriteLine(string line)
{
   using(FileStream fs = File.Open(logfile, FileMode.Append))
   {
    // Log Stuff
   }
}

因此,每当我调用该方法时,都会创建一个新的 FileStream 并在日志记录完成后进行处理。所以我考虑使用一个已经实例化的对象来防止不断创建新对象:

private string logfile = @"C:\whatever.log";
private FileStream myStream = File.Open(logfile, FileMode.Append);

public void WriteLine(string line)
{
   using(myStream)
   {
    // Log Stuff
   }
}

然而,the MSDN reference discourages this (最后一个例子),由于范围问题。 在这种情况下,人们会做什么?我的第一个示例中的开销可以忽略不计吗?

最佳答案

using 语句除了调用对象的 Dispose() 方法外没有做任何事情。
所以考虑你的第二个例子,在第一次调用 WriteLine(string) 方法后,文件流被释放。因此,在第一次调用之后,对该方法的任何其他调用都将导致异常。

像 Chris 在评论中建议的那样使用 File.AppendText() 方法是一种可行的方法。但请记住,使用此方法或任何其他 File... 方法也会打开一个流,然后关闭并处理它。
它只会导致更少的代码。

关于c# - 对已实例化的对象使用 using 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18571781/

相关文章:

c# - 如果我在使用语句结束之前调用 Dispose() 会发生什么?

c# - NotifyIcon.ShowBalloonTip 不保持超时

c# - 哪个更快 : Union or Concat?

c# - 有时我如何验证某些字段?

c# - 使用 WebAPI 的 Webforms C# 客户端验证 CustomValidator

c# - 如果对象是在 using 语句中创建的且未显式绑定(bind)到引用,则该对象是否符合垃圾回收条件?

c# - 如何在出现异常时正确处理可能被淘汰的类?

c++ - 模板构造函数继承的标准符合语法是什么?

c# - 使用 MonoDevelop 在 linux 上为 windows 编译

.net - 在 C++/.NET 中使用 SqlConnection