在c#中编写文件时“使用”指令开销

时间:2013-11-22 13:44:32

标签: c# streamwriter using-statement

我需要在两个单独的文件中写两个日志:一个每秒写入530个字符30次,另一个每秒写入60个60次。我将保存将写入两个独立变量的数据,并分别写入n和m帧。要编写我使用的变量:

using (StreamWriter writer = new StreamWriter(newFileName, true))

然后

writer.Write(data)

现在......我知道使用“使用”的优点,但我想知道:它有开销吗?为什么不在代码的开头声明StreamWriter并在需要时使用它?

3 个答案:

答案 0 :(得分:6)

好吧,如果您需要以这样的速度和频率编写数据,我建议您根本不要使用using,因为最后using关闭并处置 stream对象,因此在下一个请求中,您需要重新初始化并重新打开stream,这需要花费。

所以只需打开它并一直使用你需要它。手动处理后。

答案 1 :(得分:2)

using语句本身没有任何实际开销。但是,打开和关闭非托管资源可能。如果你要打开它,而不是利用using,那么执行日志记录的类需要实现IDispoable。此外,在Dispose方法中,需要正确处理流。最后,利用记录器的消费者,确保它在利用它时使用using命令。

答案 2 :(得分:1)

as using抛出try catch块:

using (StreamWriter writer = new StreamWriter(newFileName, true)) 
{
    //do stuff
}

相当于:

StreamWriter writer = new StreamWriter(newFileName, true);
try
{
    //do stuff
}
finally
{
   if (writer!= null)
      ((IDisposable)writer).Dispose();
}

http://msdn.microsoft.com/en-us/library/yh598w02%28v=vs.110%29.aspx

手动调用.Dispose()函数速度更快,或者正如Tigran所指出的那样,根本不进行处理。但是,要小心。