为什么反射速度很慢?

2022-09-01 13:01:46

这是因为我们应该加载类(例如),创建实例,然后搜索适当的方法,打包参数,然后只调用方法吗?所以大部分时间都花在这些操作上,而不是在对象上进行显式方法调用,对吧?string


答案 1

每次使用反射时,您采取的每一步都需要经过验证。例如,当您调用一个方法时,它需要检查目标是否实际上是该方法的声明者的实例,您是否具有正确数量的参数,每个参数是否具有正确的类型等。

绝对不可能内联或其他性能技巧。

如果要按名称查找类型或方法,则充其量只能进行简单的映射查找 - 每次执行时都会执行该查找,而不是在 JIT 时间执行一次。

基本上还有很多事情要做。但是,反射速度比以前快得多...如果你发现它太慢了,你很可能过度使用它。


答案 2

作为Jon Skeet上面答案的补充(我需要更多的声誉才能发表评论):

反射取决于可用的 CPU 资源;如果你的应用程序速度很慢,反射不会解决任何问题,只是让它变慢。

就像Java本身一样,反射不再慢 - 它更像是一个古老的谣言;)


推荐