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

时间:2013-04-19 09:13:12

标签: c# performance logging .net-4.5

我正试图找到以有效的方式记录方法名称的方法w.r.t.速度和可维护性。我想,在.NET 4.5中Caller Information attributes只是为了这个目的而暴露,除了速度部分。我觉得这些只是使用System.Reflection.MethodBase.GetCurrentMethod()stackTrace.GetFrame(1).GetMethod().Name(来自here)的语法糖。 (或)这些方法是否也具有性能优势?

在C#中,有没有办法在编译时获取方法名称(如C++中所述)?

1 个答案:

答案 0 :(得分:69)

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

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.");
}