gpt4 book ai didi

c# - Log4Net 性能

转载 作者:可可西里 更新时间:2023-11-01 03:06:08 36 4
gpt4 key购买 nike

我编写了一个 C# 应用程序,它在一个循环中持续运行,多个线程写入一个 log4net 文件。

问题是应用程序运行的时间越长,完成循环所需的时间就越多。我运行了 ANTS 性能分析器,并注意到大部分 CPU 时间都花在了使用 log4.net 进行日志记录上。

日志越详细,它使用的 CPU 就越多,30 分钟后它就使用了 100% 的 CPU。如果我禁用日志记录,循环所花费的时间会随着时间的推移保持不变。我查看了 Windows 性能监视器,物理磁盘大部分时间处于空闲状态。

我已尝试将日志记录保持在最低限度,但即使日志记录量相对较少,我仍然遇到问题。

这是我的 Log4net.xml 配置文件的示例:

<log4net>
<root>
<!-- Levels: OFF, DEBUG, INFO, WARN, ERROR, FATAL-->
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
</root>

<!--Logs to a file-->
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="c:\\logs\\log-file.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd" />
<maxSizeRollBackups value="20" />
<maximumFileSize value="1MB" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger %L %M Schdl:[%property{scheduleContext}] Job:[%property{jobContext}] - %message%newline" />
</layout>
</appender>
</log4net>

我使用来自每个记录对象的相同记录器。

  log4net.ILog logger;
log4net.Config.BasicConfigurator.Configure();
logger = log4net.LogManager.GetLogger(typeof(myProject));

为什么它运行的时间越长会占用越来越多的 CPU?

如有任何改进建议,我们将不胜感激。

最佳答案

您是否在每个记录的对象中配置 log4net?从你的代码看起来是这样的。每个进程应该配置一次,例如在启动时,然后您的对象只需要获取记录器。

对于每个需要记录的类,我通常采用以下模式:

class SomeClass
{
private static readonly ILog log = LogManager.GetLogger(typeof(SomeClass));
...
}

使用此模式,您将自动获得根据类的 namespace 和名称分层的记录器。

关于c# - Log4Net 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2410438/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com