c# - 使用 StreamWriter 和 Trace Listeners 写入日志非常慢

标签 c# performance streamwriter

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

程序运行得越多,实际上就越慢。我发现这是因为日志文件的 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,每天都会创建一个新的日志文件,名称中包含日期。

我猜是 streamwriter 有问题,但我不知道是什么。

最佳答案

这可能是问题所在:

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

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

如果您确切地知道要写入的内容,那么为什么不使用 swLog.WriteLine(.. .)?

此外,我鼓励您使用 string.Format 而不是所有重复的字符串连接...最好使用专用的日志记录框架(例如 NLoglog4Net ) .

关于c# - 使用 StreamWriter 和 Trace Listeners 写入日志非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23244963/

相关文章:

mysql - MySQL 是否以某种方式存储最后一个查询?

C# 进程无法访问文件 'XYZ',因为它正在被另一个进程使用

c# - 为什么我的文本文件会突然停止保存?

javascript - 确认对话框未在 asp.net 中归档 itemCommand

c# - 如何在 Xpath 中传递动态值

c# - 水平滚动时保持 TreeView 最左边的列可见

mysql - 运行时查询分析和优化

c - 结构效率

C# 从字符串拆分中删除最后一个分隔字段

c# - NHibernate 多对一还是我遗漏了什么?