Tag Archives: stopwatch

I Love C#! – Tipos Apropriados

Performance #4 : Vá de Tipos de Dados Apropriado

Existem contextos onde o desempenho deve ser a prioridade para viabilizar um software. Veja agora algumas dicas para melhorar a performance do código C#.

Para uma melhor performance, determine o tipo de dados apropriado. Quando deixado de lado, a exatidão do tipo a ser utilizado poderá impactar no desempenho de forma negativa.

Main.cs

No método Main:

using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace DicasDesempenhoCodigoCSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Int32> list = new List<int>();
            Stopwatch sw = new Stopwatch();
            sw.Start();

            for (int i = 0; i < 1000; i++)
            {
                list.Add(i);
            }
            sw.Stop();
            Console.Write("Via Arraylist(Object) - tempo:" + sw.ElapsedTicks + "\n");
            
            sw.Reset();
            sw.Start();
            Int32[] a = new Int32[1000];

            for (int i = 0; i < 10000; i++)
            {
                a[i] = i;
            }
            sw.Stop();
            Console.Write("Via Integer Array - tempo:" + sw.ElapsedTicks);
            
            Console.ReadLine();
        }
    }
}

Para medir o tempo utilizado, utilizo a classe StopWatch e seus métodos/propriedades para medir com precisão um tempo decorrido. Esta classe está no namespace System.Diagnostics.

Este código guarda 1000 valores inteiros de duas formas diferentes:

  • A primeira utiliza uma lista genérica para armazenar os valores.
  • A segunda utiliza um array de inteiros para armazenar os valores.

Para realizar a operação utilizo um loop for/next atribuindo os valores a serem armazenados.

Agora a pergunta de performance. Qual a abordagem mais rápida?

cs_performance_datatype_apropriado

Observações

Veja alguns pontos importantes:

Note que é mais rápido armazenar ints utilizando um array de ints ao invés de uma lista genérica.

Trabalhando com listas genericas, ela irá guardar nossos dados no formato Object. Quando fazemos a armazenagem de ints, eles são convertidos para um valor de referência para serem armazenados e isso tem um custo.

Ok! Um pouco sobre o PERFORMANCE FOR/NEXT E FOREACH.