c# - AOP 性能开销

标签 c# aop

我一直在寻找一些关于典型 AOP 任务的性能测试。不过我一直没找到,你能帮帮我吗? 我主要考虑 CaSTLe、Unity 和 PostSharp,尽管它对我的项目来说可能太贵了。

最佳答案

我也没有看到任何定量比较,所以这个答案可能远未完成。

很难将 CaSTLe 或 Unity 的性能与 PostSharp 进行比较 - CaSTLe 和 Unity 使用 runtime weaving通过动态代理和 PostSharp 增加开销 at compile stage .因此,如果性能对您至关重要,那么像 PostSharp 这样的编译解决方案总是会更好。在运行时生成 AOP 代理意味着动态生成 IL 代码和大量反射使用。

因此,有意义的性能测试必须比较使用相同技术的解决方案 - 您可以尝试比较 CaSTLe Dynamic Proxy 和 Unity Interception 代理实现。

我不太了解前者,但如果是后者,仍然需要比较三种不同的场景 - 透明代理 (MarshalByRefObject)、接口(interface)代理和子类化代理 - 每个都有自己的一组使用场景及其自身的性能开销。据我所知,透明代理非常慢,不应该在 AOP 场景中使用。接口(interface)和子类型代理会动态生成一些 IL,这与 CaSTLe DP 所做的相同,所以我认为差异不应该太大(但同样,这里没有定量结果)

关于c# - AOP 性能开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4583767/

相关文章:

c# - 使用 .NET 4 让程序最小化到系统托盘的最简单方法

c# - 在哪里可以找到 MSBuild 14.0 x64

c# - 当表单的类变得太大时怎么办?

c# - Windows 工作流中的拦截/装饰事件

aop - 面向切面编程 : What do you use PostSharp for?

Java - 获取传递给方法的参数?

javascript - ASP.Net MVC 提交表单找不到方法 - 无法使用普通表单?

c# - 删除远程机器上的文件

java - 没有 XML 的 Spring AOP

performance - Maven中有 "skip weaving flag"吗? (不包括 AspectJ)