1

我在http://www.developerfusion.com/article/5307/aspect-orienting-programming-using-net/3尝试了 AOP 示例, 它运行良好,但我遇到了性能问题。现在每个调用都有 40 毫秒的开销。

有没有办法 1. 减少开销?不确定是否有可以从示例中删除的内容。2. 更重要的是,是否只对公共方法进行了调用拦截?我可以查看 Preprocess 中的类型,但那时我已经使用了 20 毫秒,我希望私有方法根​​本不被拦截。我可以通过将属性目标设置为方法来做到这一点,但我宁愿避免这种情况并将属性目标留给类。

谢谢

4

2 回答 2

1

MarshalByRefObjects从我的角度来看,用于实现 AOP并不是一个好主意。还有很多其他好的 AOP 实现具有更好的性能,因为它们使用代码生成来实现这些方面。

于 2012-07-17T09:20:32.853 回答
0

即使使用 MarshalByRefObjects,如果您拦截的调用很少,性能也是可以接受的。40 ms 似乎是一个非常糟糕的开销,它是由执行“建议”而不仅仅是拦截过程造成的。

您可以尝试像 PostSharp 这样的编译时 AOP 框架,但如果您对“建议的实施方式”有疑问,它不会解决您的问题。

如果你想比较,可以试试NConcern .NET,这是一个运行时轻量级 AOP 框架,性能好,易于使用。

于 2016-12-28T12:11:42.737 回答