パフォーマンスの問題については、log4netの優れた点は、log4netのアプリケーション使用がボトルネックになっている場所をいつでもプロファイリングして、1)ソリューションに自分で取り組むか、2)そのボトルネックがないロギングフレームワークを見つけることができることです。
私はあなたのアプリケーションを知らずにあまり助けることはできませんが、log4netソースをざっと見てみると、NextCheckDate()
関数がすべてで呼び出されている ことに気づきました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;}
アプリケーション用に最適化されたバージョンは、おそらく次のロールオーバー時間を事前にキャッシュし、それぞれに対して1つの比較のみを行います。Append