面向方面编程:c#慢

时间:2012-06-12 23:47:53

标签: aop

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

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

由于

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

即使使用MarshalByRefObjects,如果你拦截几个电话,表演也是可以接受的。 40 ms似乎是由于“建议”的实施而导致的非常糟糕的开销,而不仅仅是拦截过程。

您可以像PostSharp一样尝试编译时间AOP框架,但如果您遇到“实施建议的方式”的问题,则无法解决您的问题。

如果你想比较一下,你可以试试NConcern .NET,一个运行时轻量级的AOP框架,具有良好的性能和易用性。