Недавно разбирался со скоростью работы логирования, а также с тем, сколько логер потребляет памяти.
Эта подсистема не бесплатная и может влиять на производительность. Увы, от логов отказаться нельзя, поэтому хотелось бы всё-таки понять, как писать их быстро и экономно по памяти.
В качестве подопытного кролика выбрал Serilog, как наиболее часто используемую в разных проектах.
Победил чистый
Serilog.ILogger, без прослойки в виде Microsoft.Extensions.Logging.ILogger. И дело не в скорости (она почти одинаковая), а в аллокации - у чистого Serilog она чуть меньше.Однако, самым удивительным для меня оказалось то, что простое использование логгера было даже чуть экономичнее аналогов из советов про High-performance logging (ну все эти
LoggerMessage.Define и LoggerMessageAttribute). Почему так получилось - понять с наскока не удалось.Бенчмарк в комментариях.
P.S.: Для специалистов: писал просто в консоль через
ConsoleSink, без изысков, поэтому цифры вот такие.
