Действительно это зависело бы от контекста в каждом случае, поскольку нет никакого определения - но говорящий очень обычно буфер место для временного содержания чего-то. Лучшая аналогия реального мира, о которой я могу думать, была бы зоной ожидания. Один простой пример в вычислениях - когда буфер относится к части RAM, используемой для временного хранения данных.
Проще говоря, самый быстрый способ сделать это статически во время компиляции:
public void DoSomething()
{
TraceCall("DoSomething");
}
public void TraceCall(string methodName)
{
if (!tracingEnabled) { return; }
// Log the call
}
Тогда вопрос, по сути, такой же, как и ваш предыдущий вопрос; как лучше всего сделать это в ремонтопригодном и аккуратном устройстве? Параметры времени выполнения, которые мы ранее обсуждали, имеют относительно серьезный удар по производительности, но недостатком является то, что они могут быть легко реализованы.
Как было упомянуто в предыдущем потоке, это начинает склоняться к аспектно-ориентированному программированию. ; PostSharp - одна из таких библиотек, которая может помочь найти баланс между статически скомпилированной производительностью и простотой обслуживания.
Наилучший способ сделать это - во время компиляции: C ++ для этого традиционно использовал символы препроцессора ____FILE____ и ____LINE____ в макросах. К сожалению, компилятор C # на данный момент не предлагает макросы или их эквиваленты для ____FILE____ и ____LINE____.
Когда вы уже находитесь внутри метода (или если вы перехватываете метод), я не думаю, что вы можете сделать что-то лучше, чем MethodInfo.GetCurrentMethod - что не так уж и быстро - если вы хотите сохранить типобезопасность.
Поскольку вы хотите сделать это для ведения журнала, рассматривали ли вы возможность сделать это в асинхронной операции, чтобы не замедлять основной поток?
В зависимости от уже загруженной нагрузки в вашем приложении, это может помочь, а может и не помочь.
Я думаю Log4PostSharp отлично справится со своей работой.
Если вас беспокоит скорость, то фактическое сообщение журнала должно быть создано с помощью Трассировка событий для Windows . ETW - это библиотека высокоскоростной регистрации, реализованная в виде драйвера, доступного как из режима ядра, так и из пользовательского режима. Трассировку можно динамически включать и выключать. Ведение журнала добавляет очень мало накладных расходов приложению. Я использовал ETW для реализации трассировки в серверных приложениях с высокой пропускной способностью. Посмотрите NTrace .