【问题标题】:Why is Emit faster than Reflection为什么发射比反射快
【发布时间】:2014-05-10 05:52:58
【问题描述】:

我已经阅读了很多关于 emit 以及它如何比反射快得多的文章,但一直无法找出原因。我知道 emit 正在注入 IL 代码,但是为什么在进行像 ORM 这样的属性映射时这比反射快?

参考这种用例: Emit mapper vs valueinjecter or automapper performance

【问题讨论】:

  • 你在哪里读到的?当我们不知道它们到底是什么时,很难解释或回应索赔。如果源是指向它的网页链接。如果是一本书,请引用相关文字。
  • 已更新源。谢谢!
  • 因为你停止使用反射。

标签: c# reflection emitmapper


【解决方案1】:

Reflection 使用通用代码和元数据来执行其操作。反射调用通常会进行大量运行时检查,例如,如果您要访问的属性确实属于您提供的对象的类型。或者您要传递给方法的参数与签名兼容。当然还有很多装箱和拆箱,因为一切都被视为一个对象。

另一方面,反射发射会专门为您要执行的任务生成代码,在编译期间只检查一次很多事情,然后执行的速度与您在源代码中编写的每个代码一样快。

动态生成代码显然有相当多的开销,但如果您只执行一次然后多次使用此代码,从长远来看会更快。正则表达式也是如此。您可以只使用它们,并且您的表达式基本上将在操作期间被解释,但是如果您必须多次使用相同的表达式,您可以指定编译选项,并且库将生成针对您的表达式量身定制的代码,然后您可以直接执行它而无需每次都需要解释表达式。

所以本质上反射就像解释代码,反射发射是(就像)编译它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-20
    • 1970-01-01
    • 2010-09-15
    • 2021-09-24
    相关资源
    最近更新 更多