Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

RSS iMasters

[Resolvido] Melhorando o desempenho de aplicativos .NET - Parte 0

Recommended Posts

Este é o segundo artigo da nossa série sobre como melhorar o desempenho de aplicativos .NET e nos concentraremos na fase inicial do processo de desenvolvimento, abordando considerações de design.

 

Em nosso artigo de introdução, mencionamos o estabelecimento de objetivos de desempenho para que você tenha algo para medir e comparar. Faça perguntas como: Quão rápido é rápido o suficiente? Quais são as suas restrições de tempo e de rendimento? Quanto CPU, memória, disco e rede de I/O são aceitáveis para que seu aplicativo utilize? Esses são itens importantes que o seu projeto deve ser capaz de acomodar.

 

Neste artigo, vamos descrever uma série de princípios de design que atendam aos objetivos de desempenho que você definiu.

 

Os princípios de design que se seguem provaram funcionar bem:

 

  • Crie serviços que reduzam o número de interações cliente-serviço (do tipo coarse-grained) e ajude a abstrair serviços internos do cliente, fornecendo uma conexão mais leve entre o cliente e o serviço. Se você já tem um serviço de transmissão para pequenos pacotes (fine-grained), considere fazer um wrapping com uma camada facade para ajudar a alcançar os benefícios de um serviço corse-grained.

  • Minimize ciclos para reduzir a latência processando chamadas em lote e projete serviços coarse grained que permitem a realização de uma única operação lógica usando um único ciclo. Você pode reduzir a comunicação através das fronteiras como threads, processos, processadores ou servidores, aplicando esse princípio, e é particularmente importante quando fizer chamadas de servidor remoto através de uma rede.

  • Minimize o tempo que você mantém recursos limitados e compartilhados, tais como conexões de rede e de bancos de dados, usando um princípio que adquire recursos tardios e os libere mais cedo. Liberar e readquirir recursos de conexões de rede e de bancos de dados do sistema operacional pode ser custoso, por isso um plano de reciclagem para apoiar "adquirir tarde e liberar cedo" permite otimizar o uso de recursos compartilhados entre as requisições.

  • Quando alguns recursos só estão disponíveis a partir de certos servidores ou processadores, existe uma afinidade entre o recurso e o servidor ou processador. Embora a afinidade possa melhorar o desempenho, também pode impactar a escalabilidade. Avalie cuidadosamente suas necessidades de escalabilidade. Você precisa adicionar mais processadores ou servidores? Se os pedidos de aplicativos estão vinculados por afinidade a um determinado processador ou servidor, você pode inibir a capacidade de escala do seu aplicativo. Conforme aumenta o carregamento de seus aplicativos, a capacidade de distribuir o processamento entre processadores ou servidores influencia a capacidade potencial de sua aplicação.

  • Se seu aplicativo usa um monte de interação cliente-serviço, considere a possibilidade de deixar o processamento mais do lado do cliente que do lado do servidor. Se o processamento interage intensamente com o armazenamento de dados, você pode querer deixar o processamento mais perto dos dados.

  • Compartilhamento de recursos são escassos ou dispendiosos para criar conexões de banco de dados ou de rede. Use compartilhamento de recursos para ajudar a eliminar a sobrecarga de desempenho associada com o estabelecimento de acesso a recursos e aprimorar a escalabilidade através do compartilhamentode um número limitado de recursos entre um número muito maior de clientes.

  • Você pode reduzir o processamento desnecessário, utilizando técnicas como cache, evitando ciclos e validando a primeira entrada.

  • Evite bloquear quando acessar os recursos para impedir o bloqueio das solicitações de recursos na fila. O bloqueio e os chamados hotspots são causas comuns de contenção. O bloqueio é causado por tarefas de longa duração, como operações de I/O dispendiosas. Hotspots são resultado do acesso a determinados dados concentrados de que todos precisam.

  • Use práticas eficientes para lidar com alterações de dados. Quando uma porção de dados muda,  processe a porção modificada, mas não todos os dados, então realize atualizações de forma incremental. Considere também renderização progressiva de saída. Não segure os resultados se quando você pode dar ao usuário uma resposta inicial, ainda que parcial, e ofereça uma interação anterior.

  • Ao processar múltiplas tarefas independentes, considere executá-las de forma assíncrona para fazer isso simultaneamente. O processamento assíncrono é principalmente eficaz quando usado para tarefas do tipo I/O, mas tem benefícios limitados quando as tasks recusadas pelo CPU e restritas a um único processador. Na verdade, as tarefas de uma CPU multithreading são desempenhadas relativamente lentas por causa da sobrecarga causada pela troca de thread.

Em nosso próximo artigo, vamos focar em dicas de desempenho de aplicações e melhores práticas.

 

?

Texto original da equipe Monitis, liderada por Hovhannes Avoyan, disponível em http://blog.monitis.com/index.php/2012/03/01/improving-net-application-performance-part-2-application-engineering-and-design-considerations/

 

 

 

 

 

http://imasters.com.br/artigo/24306/dotnet/melhorando-o-desempenho-de-aplicativos-net-parte-02

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.