C# 为什么发射比反射快

C# 为什么发射比反射快,c#,reflection,emitmapper,C#,Reflection,Emitmapper,我已经读了很多关于发射的书,以及它是如何比反射快得多,但还没有找到原因。我知道emit正在注入IL代码,但为什么在像ORM一样进行属性映射时,它比反射更快呢 参考此类用例: 反射使用通用代码和元数据来执行其操作。反射调用通常会进行大量的运行时检查,例如,如果您要访问的属性确实属于您提供的对象类型,则会进行大量的运行时检查。或者希望传递给方法的参数与签名兼容。当然还有很多装箱和拆箱,因为所有的东西都被当作一个对象 另一方面,反射emit专门为您想要执行的任务生成代码,在编译过程中只检查一次很多东西

我已经读了很多关于发射的书,以及它是如何比反射快得多,但还没有找到原因。我知道emit正在注入IL代码,但为什么在像ORM一样进行属性映射时,它比反射更快呢

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

另一方面,反射emit专门为您想要执行的任务生成代码,在编译过程中只检查一次很多东西,然后将以与您在源代码中编写的每一个代码一样快的速度执行

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


所以本质上,反射就像解释代码,反射就像编译代码。

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