Rodrigo Strauss :: Blog
|
|
|
Usando Win32 API para otimizar o I/O, parte 2
Parte Zero Parte 1 Parte 2 Parte 3 Parte 4 Parte 5 Parte 6 Fontes do parser
Antes de começar a otimização do I/O do parser, é necessário fazer algumas considerações e algumas medições. A proposta inicial é otimizar o I/O do parser, mas será que vale mesmo a pena?
Fiz algumas medições para saber quanto tempo o parser demora para ler os arquivos que ele interpreta. Depois de várias medições (aproximadamente 50), cheguei a conclusão de que gastamos, em média, 20% do tempo com I/O. Em situações onde o computador acabou de ser ligado - ou seja, quando os arquivos não estão no Cache Manager do Windows - o tempo de acesso aos arquivos pode chegar a 50% do tempo gasto pelo parser. Não esqueça que só estamos medindo o tempo necessário para ler os arquivos (que como eu já disse, somam aproximadamente 400kb), não gravamos nada.
Tempo médio gasto com I/O: 20% Tempo máximo gasto com I/O: 50%
Já que a interpretação do arquivo em si leva 80% do tempo em média, não valeria mais a pena otimizá-la e de deixar o I/O para depois? Minha resposta é não, e vou explicar os motivos. A interpretação é o core do sistema, e o código que lida com isso foi feito da forma mais clara possível, para facilitar a manutenção e melhorias. E eu não estou disposto a sacrificar a clareza do código para que o parser fique mais rápido. Sendo assim, a otimização seria mais difícil, porque provavelmente envolveria mudanças em algoritmos, além de ser feita com essas requisição (clareza do código) em mente.
O motivo principal para otimizar o I/O é que, de acordo com o que vimos no post anterior, o I/O corresponde a menos de 4 linhas de código, enquando a classe de parser tem aproximadamente 850 linhas. Essas 4 linhas de código, algumas vezes, chegam a representar 50% do tempo gasto. Sendo assim, o custo-benefício da alteração me pareceu muito satisfatório, já que é fácil otimizar o I/O, afinal, ele é uma parte pontual e fácil de ser isolada e compreendida. A otimização do I/O não vai comprometer a legibilidade do código.
Conclusão: vale a pena otimizar o I/O. Depois dessas medições, no próximo post começaremos a testar as otimizações possíveis e comprar os resultados.
Em 11/08/2005 15:27





