Category Archives: Generics

Generics – Teorias (Desempenho)

Ex 1 : Mais Desempenho

Entendendo um pouco sobre Generics. Característica importante comparada aos tipos convencionais (no Generics).

Um conceito importante para entender esse recurso é a questão de desempenho. Vamos lá:

Quando implementamos tipos byVal com classes collection não genéricas, temos as operações box/unbox que aumentam a sobrecarga quando tipo byVal for convertido para tipo byRef e vice-versa.

Chega de Teoria!

Exemplo simples

ArrayList oAL = new ArrayList();
            oAL.Add(4); 

            int x = (int)oAL[0];

            foreach (int i in oAL)
            {
                Console.WriteLine(i);
            }
            Console.ReadKey();

Para iniciar, crio uma instancia de ArrayList que irá armazenar itens como object.

Em seguida, incluo um valor com o Add() de tipo int. Ou seja, aqui o int sofre um box, e quando o valor for lido é feito o unbox. Convertendo tipo byVal para byRef.

Na linha seguinte e no WriteLine(i) também ocorrem unboxing.

ClasseGenerica<T>

Utilize a classe Genérica e defina T como tipo int:

ClasseGenerica<int>

Agora um int na classe é automaticamente gerado pelo compilador. Isso significa que as operações box/unbox não irão acontecer, e isto reflete em um desempenho melhorado.