O Visual Studio(VS) disponibiliza vários recursos que nos permitem desenvolver de forma rápida, nossas Aplicações. Essa rapidez, associada, intrinsicamente a produtividade, pode não refletir-se em "desempenho" para a Aplicação. No nosso contexto, tomemos o exemplo mais básico possivel:
Para escrevermos uma estrutura de decisão, digitamos If e, logo em seguida, carregamos a tecla TAB. O VS cria a seguinte estrutura:
=Produtividade
if (true)
{
}
Mas, se reflectirmos sobre performance, quando aplicável, o melhor seria pensarmos em uma estrutura deste tipo:
=Produtividade e Performance
switch (switch_on)
{
default:
}
Reflectir sobre performance requer algumas prerrogativas, entre elas, saber o que é melhor para o desempenho de uma Aplicação. Isto pode também chamar-se best pratices.
Já agora, o que está mal no código a seguir?
static void ReflectirSobrePerformance()
{
string digitos = string.Empty;
for(int i = 0; i < 10; i++)
{
digitos += i.ToString(currentCulture);
}
Console.WriteLine(digitos);
}
Reflictam sobre performance!
Até ao próximo post!
Fernando Oliveira
Agap2 Developer
MCTS - .NET Framework 2.0
Web Applications
sexta-feira, 6 de junho de 2008
Subscrever:
Enviar feedback (Atom)
3 comentários:
O que está mal?
A forma como se está a concatenar as strings.
Viva Fernando,
Obrigado por este segundo post.
No código eu utilizaria um StringBuilder para fazer a concatenação das strings, em vez do operador +=.
Agora, a questão que aqui deve de ser discutida, é o porquê de utilizar um StringBuilder e não o operador += ?
Repeti, em baixo, o código, com «o que está mal» corrigido:
static void ReflectirSobrePerformance()
{
string sDigitos = string.Empty;
for(int i = 0; i < 10; i++)
sDigitos += i.ToString();
Console.WriteLine(sDigitos);
}
Para além dos aconselháveis prefixos de tipo de variável, retirei o identificador "currentCulture", pois para a formatação de números inteiros menores que 1000 é, muito provavelmente, irrelevante.
Provocações à parte, a classe StringBuilder podia ser usada ao invés do operador +=. Neste caso, porém, de apenas 10 números, não é líquido que trouxesse maior velocidade de execução. Até certas dimensões do problema, a concatenação tradicional pode ter um menor custo do que a implementada, de uma forma optimizada, pela classe StringBuilder. Como bónus, obtém-se uma melhor legibilidade e uma maior simplicidade do código.
Quando a dimensão do problemas não é conhecida a priori é, de facto, aconselhável usar a classe StringBuilder.
Nada é "tudo mau" e nada é "tudo bom"!
Enviar um comentário