Производительность с использованием атрибутов информации о вызывающем абоненте
Я пытаюсь найти способы регистрации имени метода эффективным образом w.r.t. скорости и ремонтопригодности. Я думаю, In.Net 4.5 Атрибуты информации о вызывающем абоненте отображаются только для этой цели, кроме части скорости. Я чувствую, что это просто синтаксические сахара, используя System.Reflection.MethodBase.GetCurrentMethod() или stackTrace.GetFrame(1).GetMethod(). Name (Получено от здесь), (или) Являются ли эти методы также полезными для производительности?
В С#, есть способ получить имя метода во время компиляции (как в С++)?
Ответы
Ответ 1
Атрибуты информации о вызывающем абоненте заставляют компилятор С# предоставлять имя вызывающего абонента на callsite. Это происходит во время компиляции, нет отражения.
public void DoProcessing()
{
LogCall();
}
public void LogCall([CallerMemberName] string memberName = "")
{
Console.WriteLine(memberName + " was called.");
}
Будет скомпилирован:
public void DoProcessing()
{
LogCall("DoProcessing");
}
public void LogCall(string memberName)
{
Console.WriteLine(memberName + " was called.");
}