我在这里面临一个问题,我现在正在实习,我必须修改一个给定的程序。 我有一些滞后问题,我终于找到了问题:日志编写器......
程序运行得越多,它就越慢,实际上就越慢。我发现这是因为日志文件的编写器,这里是代码:
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,每天都会创建一个新的日志文件,其中包含日期名称。
我猜这个写行者有问题,但我无法弄清楚它是什么。
答案 0 :(得分:13)
这可能是个问题:
Trace.Listeners.Add(new TextWriterTraceListener(swLog));
每次添加日志条目时,都会添加一个额外的跟踪侦听器......所以第一次,您将获得一个日志条目。第二次,你将获得两个(新的)日志条目等。你应该能够在你的日志中看到这一点(虽然当你添加一个监听器然后处理这个写入器时,它不是很清楚会发生什么)。
目前尚不清楚为什么你完全使用Trace.WriteLine
,因为你确切地知道你要写什么 - 为什么不使用swLog.WriteLine(...)
?
另外,我建议您使用string.Format
代替所有重复的字符串连接...并且理想情况下使用专用的日志框架(例如NLog或log4Net)。