.net 反射性能与接口

.net 反射性能与接口,.net,reflection,interface,.net,Reflection,Interface,我在Jeremy Clark关于反射的pluralsight会议上听说,通过编程到接口可以提高反射的性能 这段视频没有解释为什么以及如何——有人能给我指点接口为什么以及如何提高反射性能吗?从Jeremy的“”讲座(2014年1月)开始,介绍了以下内容: 将类型强制转换为已知接口 所有方法调用都通过接口进行 没有动态方法调用–没有MethodInfo.Invoke 避免与私人成员互动 其基本思想是,最好使用反射来查找实现已知接口的类,然后再查找并直接使用单个方法和属性。原因是什么 你打的反思电

我在Jeremy Clark关于反射的pluralsight会议上听说,通过编程到接口可以提高反射的性能

这段视频没有解释为什么以及如何——有人能给我指点接口为什么以及如何提高反射性能吗?

从Jeremy的“”讲座(2014年1月)开始,介绍了以下内容:

  • 将类型强制转换为已知接口
    所有方法调用都通过接口进行
    没有动态方法调用–没有MethodInfo.Invoke
    避免与私人成员互动
其基本思想是,最好使用反射来查找实现已知接口的类,然后再查找并直接使用单个方法和属性。原因是什么

  • 你打的反思电话越少越好。每次调用Reflection都要花费大量时间(相对而言)。对反射进行一次调用以获得实现已知接口的类(从该接口可以通过接口访问成员)比通过反射访问每个成员更有效

  • 您可以合理地确信,与已知接口关联的类成员将以特定的方式运行,并且不会造成危险的副作用。在处理第三方程序集时,从仅基于名称的类中任意获取方法和属性是极其危险的-您无法合理地确定该方法是用于您的目的的


  • 您至少应该编辑您的帖子,以包含会话视频的链接。如果这是不可能的(或者如果你这么想的话),引用就更好了。也许在Jeremy在会话中所做的某个特定情况下,反射可以被编程到一个接口来代替,但这不是一般情况。也就是说,你不能总是用接口编程来代替反射。顺便说一句,反射在.NET中有它的位置,但我看到了太多它被滥用的例子。记住,反射是非常强大的,你几乎可以做任何你想做的事情,因此可能被滥用。另外,使用反射调用方法比直接调用方法慢几个数量级。这基本上是使用反射进行发现。但你不能总是使用这种方法。有时,一个类没有实现为您提供所需的接口。但如果可能的话,这是一个很好的建议。@petarepac-我只是想解释一下杰里米·克拉克到底是怎么回事。当然,一种方法永远不会适用于所有场景。@JDB--感谢您的回答,它解释了如何通过编程实现接口来降低反射成本(在性能方面)。@JDB-我理解这一点。我只是想说清楚,这在某些情况下是可以做到的。顺便说一句,似乎同样的方法也应该适用于基类,而不仅仅是接口。有时,即使没有公共接口,我也可以强制转换到公共基类。