sir*_*lot 11 c# reflection reflection.emit expression-trees
创建直接发射IL的方法与构建表达式树相比,是否存在性能差异?
Mar*_*ell 12
优秀而复杂的问题.在最近之前,Expression根本无法处理所有场景 - 因此在很多情况下这是一个非问题.这随着Expression.Block等的引入而改变.在大多数"常见"情况下,表达式使用可能绰绰有余,但我承认我没有精确的测量,仅仅因为我做了很多IL,我还针对没有像Expression这样的奢侈品的低级框架(当然也不是Expression.Block).我也倾向于使用复杂的"装饰"方法,这些方法非常适合在IL中叠加体操,但不一定是表达式(事实上,如果你的IL非常不足以使反射器等人与之斗争,那么它可能也不会映射干净利落地表达 - 而我的IL往往非常粗糙.
对不起,我不能给你更多的数字数据 - 关键点:
Dar*_*opp 10
最终,表达式树的API实际上只是一个比relection.emit更熟悉的API,因此它们实际上是等效的,尽管我相信你可以通过直接反射在表达式树中做很多事情.
Reflection.Emit的是整体最快的,但以同样的方式,一个for循环比的foreach快于一般.在许多情况下,您可以编写使用reflect.emit执行速度比使用表达式api更快的代码,但在大多数情况下,它们应该是等效的.
现在,表达式API确实有助于成为一种更好的处理方式,原因有两个.
所以最终,我会说这是洗漱.如果它真的很关键并且你知道反射很好,你通常可以在IL中使用一些你不会使用表达式API的快捷方式,但除此之外,在一般用法中,它们应该相当等效.
归档时间: |
|
查看次数: |
2448 次 |
最近记录: |