使用StreamWriter和Trace Listener在日志中写入非常慢

时间:2014-04-23 12:55:17

标签: c# performance streamwriter

我在这里面临一个问题,我现在正在实习,我必须修改一个给定的程序。 我有一些滞后问题,我终于找到了问题:日志编写器......

程序运行得越多,它就越慢,实际上就越慢。我发现这是因为日志文件的编写器,这里是代码:

using (StreamWriter swLog = new StreamWriter(GenerateDaylog(_logPath), true))
{    
    String sLog = "";
    sLog += DateTime.Now.ToShortDateString();
    sLog += " ";
    sLog += DateTime.Now.ToLongTimeString();
    sLog += "\t";
    sLog += new StackFrame(1).GetMethod().DeclaringType.Name;
    sLog += "\t";
    sLog += new StackFrame(1).GetMethod().Name;
    sLog += "\t";
    sLog += msg;
    Trace.Listeners.Add(new TextWriterTraceListener(swLog));
    Trace.WriteLine(sLog);          
}

现在日志文件大约是100 - 500 ko,每天都会创建一个新的日志文件,其中包含日期名称。

我猜这个写行者有问题,但我无法弄清楚它是什么。

1 个答案:

答案 0 :(得分:13)

这可能是个问题:

Trace.Listeners.Add(new TextWriterTraceListener(swLog));

每次添加日志条目时,都会添加一个额外的跟踪侦听器......所以第一次,您将获得一个日志条目。第二次,你将获得两个(新的)日志条目等。你应该能够在你的日志中看到这一点(虽然当你添加一个监听器然后处理这个写入器时,它不是很清楚会发生什么)。

目前尚不清楚为什么你完全使用Trace.WriteLine,因为你确切地知道你要写什么 - 为什么不使用swLog.WriteLine(...)

另外,我建议您使用string.Format代替所有重复的字符串连接...并且理想情况下使用专用的日志框架(例如NLoglog4Net)。