Что самый производительный путь состоит в том, чтобы зарегистрировать название класса и метода?

Действительно это зависело бы от контекста в каждом случае, поскольку нет никакого определения - но говорящий очень обычно буфер место для временного содержания чего-то. Лучшая аналогия реального мира, о которой я могу думать, была бы зоной ожидания. Один простой пример в вычислениях - когда буфер относится к части RAM, используемой для временного хранения данных.

9
задан Community 23 May 2017 в 11:45
поделиться

5 ответов

Проще говоря, самый быстрый способ сделать это статически во время компиляции:

public void DoSomething()
{
    TraceCall("DoSomething");
} 

public void TraceCall(string methodName)
{
    if (!tracingEnabled) { return; }
    // Log the call
}

Тогда вопрос, по сути, такой же, как и ваш предыдущий вопрос; как лучше всего сделать это в ремонтопригодном и аккуратном устройстве? Параметры времени выполнения, которые мы ранее обсуждали, имеют относительно серьезный удар по производительности, но недостатком является то, что они могут быть легко реализованы.

Как было упомянуто в предыдущем потоке, это начинает склоняться к аспектно-ориентированному программированию. ; PostSharp - одна из таких библиотек, которая может помочь найти баланс между статически скомпилированной производительностью и простотой обслуживания.

3
ответ дан 4 December 2019 в 21:50
поделиться

Наилучший способ сделать это - во время компиляции: C ++ для этого традиционно использовал символы препроцессора ____FILE____ и ____LINE____ в макросах. К сожалению, компилятор C # на данный момент не предлагает макросы или их эквиваленты для ____FILE____ и ____LINE____.

0
ответ дан 4 December 2019 в 21:50
поделиться

Когда вы уже находитесь внутри метода (или если вы перехватываете метод), я не думаю, что вы можете сделать что-то лучше, чем MethodInfo.GetCurrentMethod - что не так уж и быстро - если вы хотите сохранить типобезопасность.

Поскольку вы хотите сделать это для ведения журнала, рассматривали ли вы возможность сделать это в асинхронной операции, чтобы не замедлять основной поток?

В зависимости от уже загруженной нагрузки в вашем приложении, это может помочь, а может и не помочь.

2
ответ дан 4 December 2019 в 21:50
поделиться

Я думаю Log4PostSharp отлично справится со своей работой.

0
ответ дан 4 December 2019 в 21:50
поделиться

Если вас беспокоит скорость, то фактическое сообщение журнала должно быть создано с помощью Трассировка событий для Windows . ETW - это библиотека высокоскоростной регистрации, реализованная в виде драйвера, доступного как из режима ядра, так и из пользовательского режима. Трассировку можно динамически включать и выключать. Ведение журнала добавляет очень мало накладных расходов приложению. Я использовал ETW для реализации трассировки в серверных приложениях с высокой пропускной способностью. Посмотрите NTrace .

0
ответ дан 4 December 2019 в 21:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: