我重写了一个方法,该方法使用了使用System.Linq.Expressions类和Expression.Compile()方法的新代码进行反射。
正如预期的那样,程序比使用反射要快得多。
我还在普通C#中重写了相同的方法进行比较,C#中的代码比用Expression.Compile()编译的代码快4倍。在我的例子中,该方法被循环调用数千次。
请注意,我已从我的分析中取出第一个调用,以确保我没有测量编译时间。所以我编译表达式一次然后调用它数千次。
为什么使用Expression.Compile()编译的代码比普通C#编译的速度慢?
答案 0 :(得分:3)
已经注意到您必须缓存并重新使用该委托,理想情况下忽略第一次运行。要给出完整的答案,我们需要看一个具体的例子。我实际上已经看到了更快的例子(由于设置了不同的IL标志)。
所以:它取决于代码。我的猜测是你的例子做了一些转换或操作符,c#编译器处理不同(优化),但Expression必须以通用方式处理(因为它与语言无关)。
另一个因素是文字和捕获等内容的处理方式。