Ola como atributos estaticos em uma aplicação multithread atrapalham a performace da aplicação… diversos desing patterns usam atributos static… então estes desing patterns prejudicam a performace de aplicações web?
Desing Patterns X Performace da Aplicação
14 Respostas
Atributos estáticos não interferem na performance da aplicação por si só. O que você pdoe ter é problemas de concorrência, mas isso independe do uso de estáticas ou não.
Mas quais destes design patterns que usam tanto variáveis estáticas? Na minha cabeça só consigo pensar no padrão mais problemático e com uso apenas muito raro: Singleton. Como normalmente você não usa singleton isso não é problema.
As Factorys não atrapalham a performace?
Atributos estáticos não interferem na performance da aplicação por si só. O que você pdoe ter é problemas de concorrência, mas isso independe do uso de estáticas ou não.Mas quais destes design patterns que usam tanto variáveis estáticas? Na minha cabeça só consigo pensar no padrão mais problemático e com uso apenas muito raro: Singleton. Como normalmente você não usa singleton isso não é problema.
Shoes,
Já não é a primeira vez que vejo você falar sobre os singleton.
Porém eu não consegui entender ainda, quando é que realmente eu deveria utilizar singleton.
Você teria um exemplo para me dar?
Valeu.
Tambem não consegui entender…
Não tenho um exemplo exatamente porque nunca vi uma situação onde um Singleton clássico fosse realmente necessário ou mais itneressante que as alternativas.
O conceito seria; um Singleton é um objeto que só pode ser instanciado uma vez, se houverem duas ou mais isntâncias o sistema está num estado inválido.
Note que isso é muito diferente de ‘instanciar uma vez apenas e reutilizar para economizar recursos’, neste caso você não rpecisa de um Singleton, precisa apenas d euma Factory.
Sobre performanc,e a performance ao utilizar uma Factory não é afetada a um nível que dê para eprceber na maioria dos cenários, em caso de dúvida teste e meça os resultados dos testes antes de otimizar.
Phillip, você nao anima de “blogar” suas opinioes com exemplos positivos e negativos sobre o uso dos DP mais comnus?
E os principais problemas dos singleton e um exemplo.
Phillip, você nao anima de “blogar” suas opinioes com exemplos positivos e negativos sobre o uso dos DP mais comnus?
E os principais problemas dos singleton e um exemplo.
Shoes,
Eu concordo com o afsrj.
Saudações a todosO singleton foi o primeiro padrão que aprendi a implementar. Não sei quanto a performance, mas um exemplo prático so singleton seria para banco de dados. Imagine um aplicação em que você tenha apenas uma classe responsável por controlar o acesso ao banco, como: incluir, excluir, consultar, etc (as operações CRUD). Vamos supor que nesta aplicação você não gostaria que existissem varias conexões simultaneas para não consumir muitos recursos com acesso ao banco, ou seja, aproveitar a mesma instância de conexão existente. Dae você usa o sigleton para garantir apenas um new, apenas uma instância.
Valeu! Espero ter ajudado.
Dae você usa o sigleton para garantir apenas um new, apenas uma instância.
samuel,
Acho que é ai que entra a discussão do Shoes, para não usar para performance.
Pois nesse caso o banco poderia ser executado mais de uma vez, pois caso isso acontecesse o sistema continuaria em um estado válido. Teria que ser um caso onde não fazer o singleton deixasse o sistema em uma situação inválida. E é essa situação que eu gostaria de saber se existe.
Shoes, é isso? Se estiver errado por favor.
Phillip, você nao anima de “blogar” suas opinioes com exemplos positivos e negativos sobre o uso dos DP mais comnus?
E os principais problemas dos singleton e um exemplo.
Eu comecei a fazer isso algumas vezes mas sempre parei. Realmente tô me animando, como aconteceu com alguns outros artigos que escrevi para poder referenciar.
A própria VM marca objetos com “vida curta”, portanto não vejo muito problema em dar um new sempre e ter uma perda significante de performance…
Perfeito.
Porém, eu acredito que classes que consomem muito recurso ao serem instanciadas e realmente precisam de apenas uma instância dentro do sistema, justificam o uso de singleton
E que tal uma Factory que retorne sempre o mesmo objeto? Ou um Registry? Ou dependency Injection?
oq e uma dependency Injection ?
Posso ajudar nas duas perguntas desse forum , eu acho.
Uso singletons em DAOs. Todos os DAOs do sistema que trabalho atualmente são singletons. Como são muitos (o sistema tem 67 tabelas) garatno que só terei uma instância de cada um deles na memória. Também possuo uma fila que é um singleton , ela é usada para processamente assíncrono , resultados de tarefas são postos lá e várias partes do sistema pedem para ela a situação atual de seus processos.
Para acessar o singleton (DAO) a classe de negócio precisa “pedir” ao Spring uma referência. Eu injeto essa referência na classe de negócio , bem como a transação e a sessão de persistência. Quando o método de negócio é chamado ele já pode “sair usando” a transação , os daos , etc…porque alguém injetou isso nele (o Spring).
A transação , nesse caso , não foi injetada , ela foi disparada por seum aspecto (AOP) de métodos de negócio. Se o método finalizar sem execeção o aspecto fará o commit.
Injetando as dependências eu diminuo o meu código e evito fazer trabalho repetitivo como : OpenSession() , closeSession() , getDAOXXX() , etc…
Eis um exemplo de injeção:
Esse BaseDAO é a super classe dos DAOs, cada instância dela ao sercriada na inicialização do sistema receberá uma referência a outro singleton : HibernateFactory pronto para uso.
Espero ter ajudado.
A própria VM marca objetos com “vida curta”, portanto não vejo muito problema em dar um new sempre e ter uma perda significante de performance…
Porém, eu acredito que classes que consomem muito recurso ao serem instanciadas e realmente precisam de apenas uma instância dentro do sistema, justificam o uso de singleton
aí fica melhor phillip… mas eu me refiria a utilizacao classica do singleton
ainda sim, em aplicacoes simples, pra nao “engordar a crianca” sem necessidade, eu nao uso nada… ou seja, simples new mesmo… cagando para padroes…
se precisar refatora… e assim todos ficam felizes! srsrs