对于性能问题,log4net 的优点在于您始终可以对其进行分析,以查看您的应用程序使用 log4net 的瓶颈所在,或者:1)自己解决解决方案,或者 2)找到一个没有瓶颈的日志框架。
在不了解您的应用程序的情况下,我无法提供太多帮助,但粗略地看了一下 log4net 源代码,我注意到该NextCheckDate()
函数在 EVERY 上被调用 void Append(LoggingEvent loggingEvent)
。我在下面包含了 NextCheckDate 的一部分源代码,我可以肯定地想象这会导致大量日志记录场景中的性能问题。
protected DateTime NextCheckDate(DateTime currentDateTime, RollPoint rollPoint){
// Local variable to work on (this does not look very efficient)
DateTime current = currentDateTime;
// Do different things depending on what the type of roll point we are going for is
switch(rollPoint)
{
case RollPoint.TopOfMinute:
current = current.AddMilliseconds(-current.Millisecond);
current = current.AddSeconds(-current.Second);
current = current.AddMinutes(1);
break;
case RollPoint.TopOfDay:
current = current.AddMilliseconds(-current.Millisecond);
current = current.AddSeconds(-current.Second);
current = current.AddMinutes(-current.Minute);
current = current.AddHours(-current.Hour);
current = current.AddDays(1);
break;
case RollPoint.TopOfMonth:
current = current.AddMilliseconds(-current.Millisecond);
current = current.AddSeconds(-current.Second);
current = current.AddMinutes(-current.Minute);
current = current.AddHours(-current.Hour);
current = current.AddMonths(1);
break;
}
return current;}
为您的应用程序优化的版本可能会提前缓存下一个翻转时间,并且只对每个滚动时间进行一次比较Append