反射效率低下的原因:
根本原因就是把很多在编译器能做的工作都推到了运行时来动态执行,jit无法参与工作,没办法运用jvm的一些优化措施
1.编译器没法对反射相关的代码做优化
2.慢的原因还有安全检查,访问控制等。比如说这个方法你能不能获得,能不能执行等,你传进的参数的类型检查等。比如说在使用反射调用方法的时候,传进的参数需要检查是否符合方法参数类型要求吧?
a)搜索:使用System.Reflection命名空间中的类型扫描程序集的元数据时,反射要不断的执行字符串的搜索。通常,搜索时不区分大小写的比较,这会更进一步影响性能。
b)调用:使用反射调用一个成员时。比如调用方法,首先必须将实参打包(pack)成一个数组;在内部,反射必须将这些实参解包(unpack)到线程栈上。此外,在调用方法前,CLR必须检查实参具有正确的数据类型。最后,CLR必须确保调用者有正确的安全权限来访问被调用的成员。
思想:缓存+反射+委托