使用来电者信息属性会影响性能吗?

Imr*_*ran 32 c# performance logging .net-4.5

我试图找到以有效的方式记录方法名称的方法,以及速度和可维护性.我想,在.NET 4.5中,除了速度部分之外,呼叫者信息属性仅用于此目的.我觉得这些只是使用的语法糖System.Reflection.MethodBase.GetCurrentMethod()stackTrace.GetFrame(1).GetMethod().Name(来自这里).(或)这些方法是否也具有性能优势?

在C#中,有没有办法在编译时获取方法名称(就像在C++中一样)?

Dan*_*iel 75

调用者信息属性使C#编译器在调用点提供调用者的名称.这发生在编译时,没有涉及到反射.

public void DoProcessing()
{
    LogCall();
}

public void LogCall([CallerMemberName] string memberName = "")
{
     Console.WriteLine(memberName + " was called.");
}
Run Code Online (Sandbox Code Playgroud)

将编译为:

public void DoProcessing()
{
    LogCall("DoProcessing");
}

public void LogCall(string memberName)
{
     Console.WriteLine(memberName + " was called.");
}
Run Code Online (Sandbox Code Playgroud)

  • 这正是我正在寻找的。谢谢你快速的回复。您有什么想法可以在旧版本的 .NET 中实现编译时替换吗? (2认同)