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