Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MethodBase.GetCurrentMethod().Name与[CallerMemberName]_C#_.net_Reflection_Compiler Services - Fatal编程技术网

C# MethodBase.GetCurrentMethod().Name与[CallerMemberName]

C# MethodBase.GetCurrentMethod().Name与[CallerMemberName],c#,.net,reflection,compiler-services,C#,.net,Reflection,Compiler Services,这些差异和对代码的影响是什么 性能和局限性如何,怎样才能更适合 新属性包括: -[调用方文件路径属性] -[CallerMemberName] -[来电号码] 今天,它们也可以在.NET4中使用(开发起来很容易,看起来很神奇)。。它们的值是在运行时编译或解析的?例如,MethodBase.GetCurrentMethod()返回当前方法,而您可以使用[CallerMemberName]等将有关调用方法的一些信息传递到当前方法中 前者在运行时使用反射进行评估,因此速度相对较慢,而后者在编译时进行处

这些差异和对代码的影响是什么

性能和局限性如何,怎样才能更适合

新属性包括:
-[调用方文件路径属性]
-[CallerMemberName]
-[来电号码]


今天,它们也可以在.NET4中使用(开发起来很容易,看起来很神奇)。。它们的值是在运行时编译或解析的?

例如,
MethodBase.GetCurrentMethod()
返回当前方法,而您可以使用
[CallerMemberName]
等将有关调用方法的一些信息传递到当前方法中


前者在运行时使用反射进行评估,因此速度相对较慢,而后者在编译时进行处理,本质上是无操作性能。我已经在测试中验证了这一点。反射每次花费大约20微秒,如果经常调用,这可能非常重要,而
[Caller…]
属性不会产生可测量的损失。

您需要使用它们做什么?如果它们用于在异常期间报告堆栈跟踪信息,则性能应该与此无关。如果您使用它们来测试整个应用程序,那完全是另一回事。它们是在:EDIT:Performance-wise中编译的,我从来没有对它们进行过基准测试或大量使用过它们,但我怀疑它应该是相当少的,因为大多数工作都是在编译时完成的。(不确定性能关键型或超级复制程序是否经常命中代码)使用基于反射的方法(如
StackTrace
MethodBase.GetCurrentMethod()
)可能会受到方法嵌入或混淆的影响。