Я изучаю различия между использованием log4net и System.Diagnostics.Trace
для ведения журнала, и мне интересно узнать о различиях в производительности, которые я наблюдал.
Я создал тестовое приложение для сравнения производительности обоих методов ведения журнала в нескольких сценариях, и я обнаружил, что log4net значительно медленнее, чем класс Trace
. Например, в сценарии, в котором я регистрирую 1000 сообщений без форматирования строк, log4net означает время выполнения более 1000 проб, равное 9,00 мс. Trace
выполняется со значением 1.13ms. Многие мои тестовые примеры имеют относительно большую дисперсию в времени выполнения log4net; периодический характер длительных казней с выбросами, по-видимому, предполагает вмешательство GC. Попытка с помощью CLR Profiler подтверждает наличие большого количества коллекций для тонны объектов log4net.Core.LoggingEvent
, которые генерируются (справедливо, похоже, что Trace
генерирует тонну объектов Char[]
), но это не так, t отображает большую дисперсию, которую делает log4net.)
Одна вещь, о которой я помню, заключается в том, что, хотя log4net кажется примерно в 9 раз медленнее, чем Trace
, разница составляет 8 мс на 1000 итераций; это не совсем значительная утечка производительности. Тем не менее, некоторые из моих ожидаемых вариантов использования могут вызывать методы, которые регистрируются в сотни тысяч раз, и эти цифры относятся к моей быстрой машине. На более медленной машине, более типичной для конфигураций наших пользователей, разница составляет от 170 мс до 11 мс, что является немного более тревожным.
Является ли эта производительность типичной для log4net или есть некоторые ошибки, которые могут значительно увеличить производительность log4net?
(ПРИМЕЧАНИЕ: я знаю, что форматирование строки может изменить время выполнения, я пытаюсь сравнить яблоки с яблок, и у меня есть тестовые примеры без форматирования и тестовых примеров с форматированием; log4net остается пропорционально медленным, используется ли форматирование строк или нет.)
История до сих пор:
- Роберт Гулд имеет лучший ответ на вопрос; Мне было любопытно, было ли типично видеть, что log4net работает намного медленнее, чем класс
Trace
. - Ответ Алекс Шнайдер - интересная информация, но на самом деле не подпадает под вопрос. Половина намерений ввести этот журнал - помочь отладить как логические, так и проблемы с производительностью в живых системах; наши клиенты ставят наши продукты во многих экзотических сценариях, которые часто трудно воспроизводить без дорогостоящих и крупномасштабных конфигураций оборудования. Моя основная проблема заключается в том, что большая разница во времени между "не протоколированием" и "протоколированием" может повлиять на систему таким образом, что ошибок не происходит. В конце концов, масштаб снижения производительности велик, но величина мала, поэтому я надеюсь, что это не будет проблемой.