综合分析:
通过各种的调用分析,可以看出使用代理以后和原生方法调用相比性能损耗在哪里。性能差距最大的,也是耗时最多的实现方式就是添加了全类方法代理而且是使用Invoke进行全方法切面方式。该方式耗时的原因是使用了反射Invoke的方法。
直接添加Action代理类实现 Before和After的方式和原生差距不大,主要损耗在After触发时的拆装箱上。
综上分析,我们使用的时候,尽量针对性地对某一个方法进行AOP注入,而尽量不要全类方法进行AOP注入。
【总结】
通过自己实现一个AOP的动态注入框架,对Emit有了更加深入的了解,最重要的是,对CLR IL代码的执行过程有了一定的认知,受益匪浅。
该方法在使用的过程中也发现了问题,比如有ref和out类型的参数时,会出现问题,需要后续继续改进
本文的源代码已托管在GitHub上,又需要可以自行拿取(顺手Star哦~):https://www.easck.com/p>
VS打开后,可以在 EmitDynamicProxy 分区下找到;本博客所有的测试项目都在项目中可以找到。











