将日志写入文本文件会影响网站的性能
本文关键字:影响 网站 性能 文件 日志 文本 | 更新日期: 2023-09-27 18:28:29
我有一个ASP.NET网站。我正在编写日志文件以获取页面的总时间跨度。在txt文件中写入日志会影响程序的性能吗?我将此记录在类似OnUnload
的事件中。
string logString = string.Format("The total time span for the '{0}' is {1}ms",
_page,
span.TotalMilliseconds);
WriteLog(logString);
日志摘录:
8/6/2013 05:38:27]:The total time span for the 'Assign' is 3121.1785ms
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 5.0002ms
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 5.0003ms
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 4.0002ms
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 5.0003ms
[8/6/2013 05:38:27]:The total time span for the 'Assign' is 6.0004ms
您正在做的事情,而任何都会影响您的性能。写入文件相对较慢,因此是的,它会对您的性能产生影响。这在多大程度上取决于您的硬件配置,坦率地说,取决于您没有展示的WriteLog()
方法。
除此之外,一旦一个进程试图向日志中写入内容,而另一个进程也在这样做,您就会遇到问题。
如果您想最大限度地减少对性能的影响,请尝试尽快卸载日志记录,最好将其卸载到另一个线程。
嗯,影响很可能不会受到影响。至少不引人注目的是,只要你没有登录太多。您应该看看像log4net这样的日志框架。它将为您做很多事情,比如在给定数量的日志之后写入txt文件。这将减少对文件的写入量。
如果你想自己做,我建议在另一个线程上执行日志,如下所示:
var thread = new Thread(message =>
{
// write message to txt file.
});
thread.Start("This is a log statement");
这样它就不会占用你的主线。但是,使用多个线程写入文件是非常危险的。你需要一些锁定:
private static readonly object _writeLock = new object();
var thread = new Thread(message =>
{
lock (_writeLock)
{
// write message to txt file.
}
});
thread.Start("This is a log statement");
现在您可以确定只有一个线程在写入该文件。我仍然建议使用log4net或任何其他为您完成这项工作的框架。
是的,它影响应用程序的性能,效果与用户数量成正比
如果您只需要花费时间,IIS日志默认会有。
默认IIS日志格式(表示IIS6和win-server2003,但这也是较新版本中的默认格式
time-taken: The length of time that the action took, in milliseconds.