He escrito una aplicación C# que se ejecuta constantemente en un bucle y varios hilos escriben en un archivo log4net.Log4Net performance
El problema es que cuanto más tiempo se ejecuta la aplicación, más tiempo lleva completar un ciclo. He ejecutado un analizador de rendimiento ANTS, y noté que la mayor parte de este tiempo de CPU se usa para iniciar sesión con log4.net.
Cuanto más detallados sean los registros, más CPU usará y después de 30 minutos usará el 100% de la CPU. Si deshabilito el registro, el tiempo de un bucle permanece constante a lo largo del tiempo. Eché un vistazo al Monitor de rendimiento de Windows y el Disco físico está inactivo la mayor parte del tiempo.
He intentado mantener mi registro al mínimo, pero incluso con cantidades relativamente bajas de registro todavía estoy experimentando el problema.
Aquí es una muestra de mi archivo de configuración 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>
estoy usando el mismo registrador de cada objeto que registra.
log4net.ILog logger;
log4net.Config.BasicConfigurator.Configure();
logger = log4net.LogManager.GetLogger(typeof(myProject));
¿Por qué usaría más y más CPU cuanto más tiempo funcione?
Cualquier consejo sobre cómo mejorar esto sería apreciado.
intente utilizar un appender ADOnet en su lugar? – ram
ADOnet causaba el mismo problema –