我正在考虑使用Castle Windsor的拦截器来缓存数据,以帮助扩展asp.net站点。
有没有人有这样做的想法/经验?
次要说明:我的意图是使用Windsor截取“昂贵的”调用,并将其委托给MemCacheD或Velocity (或另一个分布式缓存)进行缓存本身。
发布于 2008-09-24 04:59:54
我一直在Windsor中使用缓存装饰器(而不是拦截器),它们工作得很好。
拦截器对此也很有帮助,参见this示例。
发布于 2008-10-13 13:23:34
嘿,我们已经使用了Castle Windsor拦截器,基于这篇文章:http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx以及上面提到的那个。
我发现整个事情都很简单,这是一种非常优雅的AOP方法。然而……
不过,要小心性能。使用拦截创建了一个动态代理,这肯定会减慢速度。基于我们使用500节点计算场的基准测试,我们发现在Windsor中使用拦截的性能下降了大约30%,这也超出了我们在拦截中所做的事情(本质上是记录方法调用和传入我们的方法的参数)。简单地删除拦截就可以大大加快整个应用程序的运行速度。
小心不要让你的昂贵的电话变得非常昂贵。:)如果我是你,我会考虑在不同的级别缓存,可能是通过实现一个IRepository类型模式,然后在适当的时候用各种缓存策略来支持它。
祝好运,
--
马特。
发布于 2008-09-18 17:29:52
您是如何实现数据访问的?如果你使用的是NHibernate,我建议在这里使用缓存。NHibernate为.NET内置缓存、memcached (通过NMemcachD)和Velocity提供了缓存策略。我已经广泛地将memcached用于企业级应用程序,并且没有遇到任何问题。
基于拦截器的缓存机制是一个有趣的想法,我以前从未想过这个想法。这将非常容易透明地应用。我认为我喜欢使用Castle的AOP特性是因为它是基于代理的,你不必用属性污染你的代码。
https://stackoverflow.com/questions/94410
复制相似问题