Если я хочу, чтобы достичь максимально возможной производительности с NLog
Целью перегрузок, которые принимают LogMessageGenerator
, чтобы отложить сообщение строительства журнала.
Это может быть полезно для случаев, когда регистратор вызывается из потока, который должен быть ответственным (потоки пользовательского интерфейса или потоки HTTP-запроса являются хорошими примерами), и вы знаете, что создание конкретного сообщения журнала занимает много времени ,
Используя эти перегрузки и асинхронное ведение журнала, NLog вернет управление вызывающему абоненту ASAP и выполнит переданный делегат позже в фоновом потоке.
Это все.
Я имею в виду, что проходящие делегаты здесь и там не будет сделать свой код или NLog быстрее. Кроме того, это:
_logger.Info(() => { return "test" });
будет медленнее, по сравнению с:
_logger.Info("test");
из-за накладных расходов метода вызова вместо того чтобы использовать существующую строку буквальным.
P.S.
Заметим, что лямбда-выражения, используемые для построения делегатов, можно было бы записать в более простой форме:
_logger.Info(() => "test");
_logger.Info(() => string.Format("msg", myParams));
Опять же, это не о производительности, но и о читабельности.