我重写了一种使用反射的方法以及使用System.Linq.Expressions类和Expression.Compile()方法的新代码.
不出所料,该程序比使用反射要快得多.
我还重写了普通C#中的相同方法进行比较,C#中的代码比用Expression.Compile()编译的代码快4倍.就我而言,该方法被循环调用数千次.
请注意,我从性能分析中取出了第一个调用,以确保不计算编译时间.所以我只编译一次表达式,然后调用它数千次.
为什么用Expression.Compile()编译的代码比纯C#慢?
解决方法:
已经注意到,您必须缓存并重新使用委托,理想情况下忽略第一次运行.为了给出完整的答案,我们需要看一个具体的例子.实际上,我已经看到了一些示例,它的速度更快(由于设置了不同的IL标志).
所以:这将取决于代码.我的猜测是,您的示例对c#编译器以不同方式(优化)处理了某些转换或运算符,但Expression必须以通用方式进行处理(因为它与语言无关).
另一个因素是如何处理文字和捕获之类的东西.