是否在编译时优化了一些反射代码?

时间:2014-06-20 08:21:25

标签: c# optimization reflection compile-time

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

  • 例如,System.Reflection.MethodInfo.GetCurrentMethod在使用相同方法调用时始终返回相同的值。

  • 此外,使用类名表示的常量字符串访问类信息没有理由在运行时完成。

我测试了它,我得到的结果显示反射的代码比不反射的代码慢300倍。

是否有任何可以启用我想要的编译选项?

3 个答案:

答案 0 :(得分:1)

对于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()));
}

答案 1 :(得分:0)

.net中的反思确实非常缓慢。人们无能为力。

另一方面,它可能适合您使用更快的反射' http://fasterflect.codeplex.com/,它实现了内置.net反射的几个功能,并提高了性能。

答案 2 :(得分:0)

所有反射都可以缓存并执行一次。我建议它保持性能和可扩展性。 (在静态构造函数中为静态字段评估例子)

像getcurrent这样的方法......是一个懒惰的短裤代码。你知道你在哪里......你可以将你的methodinfo保存在静态私有字段中以使用它们。