温莎拦截器AOP和缓存

Sta*_*y A 7 .net aop castle-windsor

我正在考虑使用Castle Windsor的Interceptor来缓存数据以帮助扩展asp.net网站.

有没有人对此有任何想法/经验?

轻微澄清:我的目的是使用Windsor拦截"昂贵"的调用并委托MemCacheD或Velocity(或其他分布式缓存)进行缓存.

MrM*_*ght 5

嘿,我们使用了 Castle Windsor 拦截器,基于这篇文章:http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx以及上面提到的。

我发现整个事情非常简单,而且这是一种非常优雅的 AOP 方式。然而....

但要小心表演。使用拦截会创建一个动态代理,这肯定会减慢速度。根据我们使用 500 个节点计算场的基准测试,我们发现通过在 Windsor 中使用拦截,性能下降了约 30%,这也超出了我们在拦截内所做的事情(本质上是记录方法调用和传递到我们的方法的参数) 。简单地删除拦截就可以大大加快整个应用程序的速度。

小心不要让昂贵的电话变得非常昂贵。:) 如果我是你,我会考虑在不同级别进行缓存,可能是通过实现 IRepository 类型模式,然后在适当的情况下使用各种缓存策略来支持它。

祝你好运,

——
马特.


Mau*_*fer 2

我一直在 Windsor 中使用缓存装饰器(而不是拦截器),它们工作得很好。

拦截器对此也很有用,例如参见这个。

  • 缓存装饰器?这与拦截器有何不同?在使用流畅注册的声明方面?请举例。 (4认同)