Pergunta

Estou pensando em usar interceptores de Castelo de Windsor para armazenar dados para ajudar a escala de um site asp.net.

Alguém tem alguma pensamentos / experiência com isso?

Minor esclarecimento: Minha intenção era usar Windsor interceptar 'caros' chamadas e delegar memcached ou Velocity (ou outro cache distribuído) para o próprio cache.

Foi útil?

Solução

Estou usando decoradores cache (não interceptores) com Windsor e um grande trabalho.

Os interceptores são bons para isso, bem, veja este por exemplo.

Outras dicas

Olá, Nós usamos o Castelo de Windsor interceptores, com base neste artigo: http://www.davidhayden.com/blog/dave/archive/2007/03/14/CastleWindsorAOPPolicyInjectionApplicationBlock.aspx , bem como o mencionado acima.

Eu achei a coisa toda muito fácil e é uma maneira muito elegante de fazer AOP. No entanto ....

Cuidado com o desempenho embora. Usando interceptação cria um proxy dinâmico que as coisas definitivamente abrandar. Com base em nossos benchmarks usando uma fazenda de computação 500 Nó vimos uma diminuição de cerca de 30% o desempenho usando interceptação em Windsor, este estava fora o que estávamos fazendo dentro da intercepção, bem como (essencialmente registrando chamadas de método e parâmetros passados ??para nossos methdods) . e simplesmente removendo a intercepção acelerou o aplicativo inteiro até um pouco.

cuidado para não fazer suas chamadas caras realmente caro. :) Se eu fosse você gostaria de olhar para o cache em um nível diferente, provavelmente através da implementação de um padrão de tipo IRepository e backing que, com várias estratégias de cache se for caso disso.

Boa sorte,

-
Matt.

Como você está implementando o seu acesso a dados? Se o seu usando NHibernate, gostaria de sugerir cache aqui. NHibernate vem com estratégias de cache para o .NET built-in cache, memcached (via NMemcachD) e Velocity. Eu usei memcached extensivly para aplicações de nível empresarial e não tive um problema com ele.

Um mecanismo de cache baseado intercepter é uma idéia interessante, que eu não tenha pensado antes. Seria muito fácil transparente aplicar. O único acho que eu amo sobre o uso da AOP recursos do Castelo é porque ele proxy baseado, você não tem a poluir o código com atributos.

Eu olhava para o Microsoft Velocity . Se você planeja criar um aplicativo corporativo, isso pode ser uma boa solução

Eu criei no projeto de código aberto chamado cachew.castlewindsor com um interceptor de cache. É uma solução de uso geral para armazenamento em cache.

Aqui está um exemplo simples de uso:

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

O comportamento padrão é armazenar em cache todos os métodos que começa com Get e retorno de dados, mas você também pode mudar o que prefixos de cache.

O projeto está disponível em NuGet: http://www.nuget.org/packages/Cachew.CastleWindsor/

E o código fonte está disponível aqui: https://github.com/kobbikobb/Cachew

Windsor é grande, mas por que usar isso para o cache quando você tem vários construído em maneiras para armazenar dados. Windsor tem o seu fundamento em outras áreas não necessariamente cache. Desde o objeto de cache de sessão para cookies. Há muitas maneiras de cache. Mais importante em grandes aplicativos que você acabar precisando de cache distribuído. MS está trabalhando em um produto para isso e há um par bom vendedores lá fora, que têm produtos no mercado.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top