ASP.NET Site Performance Secrets

1/26/2011 10:47:00 PM By Felipe Pessoto

Hoje terminei de ler este livro, ele é recente, lançado em Outubro de 2010. O livro é focado em ASP.NET guiando o leitor por todos os gargalos que podem atrapalhar a escalabilidade do seu site. Chega a ser assustora a diferença entre um site otimizado para performance máxima e um mal projetado. Um exemplo de um tweet do Joel Spolsky: "Digg: 200MM page views, 500 servers. Stack Overflow: 60MM page views, 5 servers. What am I missing?". Não que o Digg seja mal projetado, pelo contrário, mas mesmo assim como é possível tanta diferença? Bem os criadores do Stack Overflow são todos referências e sabem as melhores técnicas do que se fazer ou não fazer.

Quando comecei a ler o livro achei que iria encontrar aquelas dicas básicas, de não enviar dados demais pela rede, usar CDN, etc, mas o autor aborda muito mais do que isso, até aprendi sobre alguns recursos que eu desconhecia sobre o ASP.NET. Em resumo os principais assunto são: CPU, Memória, Caching, Threads, Thread Locking, Compressão, IO, Banco de Dados, CDN, Javascript e Testes de Cargas.

As vezes acabamos esquecendo de alguns detalhes(não menos importantes) que podem comprometer toda a experiencia de uso. Por exemplo, não se preocupar com o Thread Pool/Thread Locking do ASP.NET pode fazer seu servidor demorar pra responder as requisições mesmo que não esteja usando 100% da CPU, ou códigos Javascript que bloqueiam a renderização da página. O Autor explica porquê estes problemas ocorrem e como evitá-los. Recomendo!

 

ASP.NET Site Performance Secrets
Autor: Matt Perdeck

Comprar no Amazon

Iterators

1/19/2011 4:16:00 PM By Felipe Pessoto

Muito antigamente, quando se programava em C# 1.0, caso você precisasse implementar as interfaces IEnumerable ou IEnumerator era necessário fazer na mão, implementando os métodos Current, MoveNext e Dispose para o IEnumerator e GetEnumerator para o IEnumerable.
O mais complicado era o MoveNext(), pois é necessário criar uma máquina de estado para saber qual resultado deve ser atribuido ao Current.
Estas interfaces são conceitos importantes no C# e na plataforma .NET em geral, o foreach funciona baseado na classe IEnumerable, chamando seu único método GetEnumerator que por sua vez retorna um object que implementa a interface IEnumerator.

Com o C# 2.0, uma nova keyword e muito trabalho do compilador, é possível simplificar tudo isso. Usando o yield return no seu método ou no get da propriedade o compilador se encarrega de criar uma classe aninhada que implementa essas interfaces pra você, controlando todos os fluxos respeitando if´s, for´s blocos finally, etc. É um trabalho enorme por parte do compilador e claro da equipe do compilador do C# que trabalhou duro no algoritmo. Hoje essa "feature" é uma das maiores no compilador do C#.

Nada melhor do que vermos o código para entender melhor como tudo isto funciona. Vou mostrar um método que retorna IEnumerator<int> e o resultado gerado pelo compilador, usando o Reflector pra isso.

Read more...