Category Archives: Performance

I Love C#! – For/Next e ForEach

Performance #3 : Vá de loop for/next

Para uma melhor performance, se puder vá de for/next ao invés de foreach.

Console Project

Para criar este app irei utilizar a estrutura simples de soluções C#.

  • Nome : DemoCS
  • Template : Console Project
  • Referências : Default
  • NetFW : 4.6

Como o objetivo é mostrar as características da linguagem, será utilizado um projeto Console Application. Todos os exemplos foram desenvolvidos no Community 2015.

Main.cs

Agora só resta programar:

List<Int32> listCity = new List<int>();
List<Int32> listaA = new List<Int32>();
List<Int32> listaB = new List<Int32>();

for (int i = 0; i < 400; i++)
{
    listCity.Add(i);
}
Stopwatch sw = new Stopwatch();
sw.Start();
            
for (int i = 0; i < listCity.Count; i++)
{
    listaA.Add(i);
}
sw.Stop();
            
Console.Write("Laço For/Next:" + sw.ElapsedTicks + "\n");
sw.Restart();

foreach (int a in listCity)
{
    listaB.Add(a);
}
sw.Stop();
Console.Write("Laço Foreach:" + sw.ElapsedTicks);

Os imports foram omitidos por brevidade.

A listaCity guarda valores de 0 a 400.

Para analisar a comparação, a segunda e terceira lista armazenam valores contidos na primeira lista com os loops for/next e foreach.

O foreach itera sobre coleções, enquanto o for/next pode realizar iterações mais genéricas.

Agora a pergunta. Qual a forma mais rápida de loop?

cs_performance_fornext_foreach

Observações

Veja alguns pontos importantes:

Note que o for/next é mais rápido que o foreach.

O foreach tem um enumerator sobrecarregando, o método IEnumerable.GetEnumerator. Isso faz com que ambos gerenciem a pilha e a função virtual em tipos simples gerando um overhead.

Trabalhando com coleções, o for/next ainda é mais rápido.

Ok! Sobre o PERFORMANCE FOR/NEXT E FOREACH é tudo o que eu tenho a dizer.