2014-05-10 57 views
4

我一直在阅读了很多关于发射和更快它是如何比反射快多了,但一直没能找出原因。我明白发射是注入IL代码,但为什么这种速度比反射时做像ORM一样的属性映射?为什么排放超过反射

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

+2

你在哪里读的?当我们不知道究竟是什么时,很难解释或回应索赔。如果源是一个网页链接到它。如果是一本书,请引用相关文字。 –

+0

与源代码一起更新。谢谢! – drac64

+0

因为你停止使用反射。 –

回答

5

思考使用通用代码和元数据来执行其操作。反射调用通常会进行很多运行时检查,例如,如果您要访问的属性确实属于您提供的对象的类型。或者你想传入一个方法的参数与签名是兼容的。当然还有很多拳击和拆箱,因为所有东西都只是作为一个对象来对待。

在另一方面反射发出生成代码专门为要执行的任务,在编译期间检查了很多事情只有一次,然后将执行一样快,你每次都写在源代码代码。

有明显动态生成的代码相当一些开销,但如果你这样做一次,然后使用此代码很多时候它会在长期更快。正则表达式是一样的。你可以使用它们,你的表达式在操作过程中基本上会被解释,但是如果你必须多次使用相同的表达式,你可以指定编译选项,并且库会产生适合你的表达式的代码,然后你可以直接执行它每次都需要解释表达式。

因此,在本质反射像解释代码,反射发射是(像)编译它。