将日志写入文本文件会影响网站的性能

本文关键字:影响 网站 性能 文件 日志 文本 | 更新日期: 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.