我认为一些使用反射的代码可以在编译时进行优化(我不确定能否称之为优化)。
例如,
System.Reflection.MethodInfo.GetCurrentMethod
在同一方法中被调用时总是返回相同的值。此外,使用表示常量字符串的类名访问类信息没有理由在运行时执行。
我已经进行了测试,结果显示使用反射的代码比没有反射的代码慢了约300倍。
是否有任何编译选项可以实现我想要的效果?
我认为一些使用反射的代码可以在编译时进行优化(我不确定能否称之为优化)。
例如,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()));
}
所有反射操作都可以被缓存并执行一次。我建议这样做是为了保持性能和可扩展性。(例如,在静态构造函数中评估静态字段)
像getcurrent...thing这样的方法是一种懒加载的快捷方式代码。你知道自己在哪里...你可以将你的方法信息保存在静态私有字段中以便使用。
.NET 中的反射确实非常缓慢。对此,我们无能为力。
另一方面,您可以使用“fasterflect”http://fasterflect.codeplex.com/
,它实现了内置 .net 反射的多个功能,并提高了性能,这可能更适合您。