是一些在编译时优化的反射代码

本文关键字:优化 反射 代码 编译 | 更新日期: 2023-09-27 18:09:44

我认为一些使用反射的代码可以在编译时进行优化(我不确定我们可以称之为优化)。

  • 例如,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保存在静态私有字段中以使用它们