为什么使用Expression <tdelegate> .Compile()编译的代码比普通的C#慢?</tdelegate>

时间:2010-10-04 17:38:57

标签: c# performance

我重写了一个方法,该方法使用了使用System.Linq.Expressions类和Expression.Compile()方法的新代码进行反射。

正如预期的那样,程序比使用反射要快得多。

我还在普通C#中重写了相同的方法进行比较,C#中的代码比用Expression.Compile()编译的代码快4倍。在我的例子中,该方法被循环调用数千次。

请注意,我已从我的分析中取出第一个调用,以确保我没有测量编译时间。所以我编译表达式一次然后调用它数千次。

为什么使用Expression.Compile()编译的代码比普通C#编译的速度慢?

1 个答案:

答案 0 :(得分:3)

已经注意到您必须缓存并重新使用该委托,理想情况下忽略第一次运行。要给出完整的答案,我们需要看一个具体的例子。我实际上已经看到了更快的例子(由于设置了不同的IL标志)。

所以:它取决于代码。我的猜测是你的例子做了一些转换或操作符,c#编译器处理不同(优化),但Expression必须以通用方式处理(因为它与语言无关)。

另一个因素是文字和捕获等内容的处理方式。