Tag Archives: class library

#01 – C# – Performance – Dados a membros

Performance #1 : Atribuir dados a membros de uma classe

Saga :: M&M (Mundo Mobile) 

A Saga C# e a performance. Vamos lá:

Pessoa.cs

Aqui temos a definição da classe Pessoa:

namespace AtribuirMembrosClasses
{
    public class Pessoa
    {
        public static string Nome { get; set; }
        public static string Mail;
    }
}

Nada demais, apenas uma classe que possui uma propriedade Nome e um membro Mail, ambos definidos como estáticos.

No Main

Agora só resta utilizar esses membros:

using System;
using System.Diagnostics;

namespace AtribuicaoMembrosClasses
{
    class Program
    {
        static void Main(string[] args)
        {
            Stopwatch st = new Stopwatch();
            st.Start();
            for (int i = 0; i < 400; i++) { Pessoa.Nome = "Aldo"; } st.Stop(); Console.WriteLine("usando Property: -> tempo gasto : " + st.ElapsedTicks);
            st.Restart();
            for (int i = 0; i < 400; i++) { Pessoa.Mail = "C#"; } st.Stop(); Console.WriteLine("Usando Atribuição Direta (Membro) : -> tempo gasto : " + st.ElapsedTicks);
            Console.ReadLine(); 
        }
    }
}

Aqui estou atribuindo valores à classe Pessoa:

  • Usando a propriedade Nome
  • Usando o membro Mail

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

Observações

Veja alguns pontos importantes:

Note que atribuir valores via propriedade é bem lento.

cs_performance_dadosmembros

Se preferir utilizar instâncias das classes e não definir os membros da classe como estáticos, usar a propriedade será ainda mais lento.

Ok! Sobre o ATRIBUIR MEMBROS CLASSES é tudo o que eu tenho a dizer.

A Magia das Interfaces

ICollection – Overview

Definição

O .NETFW oferece duas versões de ICollection, a System.Collections.ICollection e a System.Collections.Generic.ICollection T versão genérica para manipular coleções.

A Definição

A definição do tipo ICollection:

public interface ICollection : IEnumerable
{
    int Count { get; } 
    bool IsSynchronized { get; }
    Object SyncRoot { get; }
 
    void CopyTo(Array array, int index);
}

Note como o C# implementa esse grupo de coleção.

A ICollection herda de IEnumerable. Então, acessamos todos os membros da IEnumerable implementados em todas as classes que implementam a ICollection.

Para mais detalhes sobre métodos e propriedades. Consulte a documentação da MSDN.

Define o tamanho, os enums, e os métodos de sincronização para todas as coleções não genéricas.

ICollection T

Agora a versão genérica:

public interface ICollection<T> : IEnumerable<T>, IEnumerable
{
    int Count { get; }
    bool IsReadOnly { get; }
 
    void Add(T item);
    void Clear();
    bool Contains(T item);
    void CopyTo(T[] array, int arrayIndex);
    bool Remove(T item);
}

Note que ela se difere da versão não-genérico.

Ela define métodos para adicionar, remover e limpar uma coleção. A forma da implementação da sincronização também se difere.

Provavelmente, isso ocorreu devido à versão genérica dessa interface ter sido incorporada no. NET 2.0 enquanto que a versão não genérica foi adicionada no NET 1.1.