我认为一些使用反射的代码可以在编译时进行优化(我不确定我们可以称之为优化)。
-
例如,
System.Reflection.MethodInfo.GetCurrentMethod
在相同的方法中调用时总是返回相同的值。 -
同样,在运行时使用类名表示的常量字符串访问类信息是没有理由的。
我已经对它进行了测试,我得到的结果显示有反射的代码比没有反射的代码慢300倍。
是否有任何编译选项启用我想要的?
对于System.Reflection.MethodInfo.GetCurrentMethod
。这通常用于获取当前方法调用的名称。
如果这是用例
public void Foo()
{
var method = System.Reflection.MethodInfo.GetCurrentMethod();
Log.Log(string.Format("I is inside of {0}", method.Name));
}
那么你应该用
代替它public static MemberName([CallerMemberName] memberName = null)
{
return memberName;
}
public void Foo()
{
Log.Log(string.Format("I is inside of {0}", MemberName()));
}
.net中的反射确实慢得令人痛苦。我们对此无能为力。
另一方面,它可能适合你使用' fasterreflect ' http://fasterflect.codeplex.com/
,它实现了内置。net反射的几个功能,并提高了性能。
所有反射都可以缓存并执行一次。我建议这样做是为了保持性能和可扩展性。(为静态字段赋值,例如在静态构造函数中)
方法像getcurrent…事情是一个懒惰的捷径代码。你知道你在哪里……您可以将methodinfo保存在静态私有字段中以使用它们