Question

J'envisage d'utiliser les intercepteurs de Castle Windsor pour mettre en cache des données afin d'aider à redimensionner un site asp.net.

Quelqu'un a-t-il des idées ou une expérience à ce sujet?

Clarification mineure: Mon intention était d'utiliser Windsor pour intercepter les appels "coûteux" et de déléguer à MemCacheD ou à Velocity (ou un autre cache distribué) pour la mise en cache elle-même.

Était-ce utile?

La solution

J'utilise des décorateurs de cache (pas des intercepteurs) avec Windsor et ils fonctionnent très bien.

Les intercepteurs sont également utiles, voir this par exemple.

Autres conseils

Hé, nous avons utilisé les intercepteurs Castle Windsor, basés sur cet article: http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx ainsi que celui mentionné ci-dessus.

J’ai trouvé le processus assez facile et c’est une façon très élégante de faire de la AOP. Cependant ....

Attention à la performance cependant. L'utilisation de l'interception crée un proxy dynamique qui va certainement ralentir les choses. Sur la base de nos tests de référence utilisant une batterie de serveurs 500 nœuds, nous avons constaté une baisse de performance d’environ 30% grâce à l’interception à Windsor, ce qui était également différent de ce que nous faisions dans l’interception (essentiellement les appels de méthode de journalisation et les paramètres transmis à nos méthodes). . et le simple fait de supprimer l'interception a accéléré l'application dans son ensemble.

Faites attention à ne pas rendre vos appels coûteux vraiment coûteux. :) Si j'étais vous, je chercherais à mettre en cache à un niveau différent, probablement en implémentant un modèle de type IRepository et en le sauvegardant ensuite avec diverses stratégies de cache, le cas échéant.

Bonne chance,

-
Mat.

Comment implémentez-vous votre accès aux données? Si vous utilisez NHibernate, je suggérerais de mettre en cache ici. NHibernate est livré avec des stratégies de cache pour le cache intégré .NET, memcached (via NMemcachD) et Velocity. J'ai beaucoup utilisé memcached pour les applications d'entreprise et cela ne m'a posé aucun problème.

Un mécanisme de mise en cache basé sur un intercepter est une idée intéressante, à laquelle je n’avais jamais pensé. Il serait très facile d'appliquer de manière transparente. Celui qui me plaît le plus à propos de l’utilisation des fonctionnalités AOP de Castle réside dans le fait qu’il repose sur un proxy, vous n’aurez pas à polluer votre code avec des attributs.

Je consulterais le Microsoft Velocity . Si vous envisagez de créer une application d'entreprise, cela pourrait être une bonne solution

J'ai créé un projet open source nommé cachew.castlewindsor avec un intercepteur de mise en cache. C’est une solution polyvalente pour la mise en cache.

Voici un exemple simple d'utilisation:

var conteneur = new WindsorContainer (); container.Register (Component.For < CacheInterceptor > ()   .Instance (new CacheInterceptor (new Cache (TimeoutStyle.RenewTimoutOnQuery, TimeSpan.FromSeconds (3))))); container.Register (Component.For & ISt > (). ImplementedBy < Server > (). Interceptors < CacheInterceptor > ());

Le comportement par défaut consiste à mettre en cache toutes les méthodes commençant par Get et à renvoyer des données, mais vous pouvez également changer les préfixes à mettre en cache.

Le projet est disponible sur Nuget: http://www.nuget.org/packages/Cachew.CastleWindsor/

Et le code source est disponible ici: https://github.com/kobbikobb/Cachew

Windsor est formidable, mais pourquoi l'utiliser pour la mise en cache alors que vous disposez de plusieurs méthodes intégrées pour mettre en cache les données. Windsor a ses fondements dans d'autres domaines, pas nécessairement en cache. De l'objet de cache à la session aux cookies. Il y a plusieurs façons de mettre en cache. Plus important encore, dans les grandes applications, vous finissez par avoir besoin de la mise en cache distribuée. MS travaille sur un produit pour cela et il existe quelques bons vendeurs qui ont des produits sur le marché.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top