Я написал приложение на C #, которое постоянно работает в цикле, и несколько потоков записывают в файл log4net.
Проблема в том, что чем дольше приложение работает, тем больше времени требуется для завершения цикла. Я запустил профилировщик производительности ANTS и заметил, что большая часть этого времени процессора тратится на ведение журнала с log4.net.
Чем больше подробных журналов, тем больше ЦП он использует и через 30 минут он использует 100% ЦП. Если я отключу ведение журнала, время, затраченное на цикл, останется постоянным во времени. Я посмотрел на системный монитор 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));
Почему он будет использовать все больше и больше процессоров, чем дольше он будет работать?
Буду признателен за любые советы, как улучшить это.