Início > C# > Série: Testes de Perfomance – Ordenando coleções de String (Final)

Série: Testes de Perfomance – Ordenando coleções de String (Final)

28 de fevereiro de 2010 Deixe um comentário Go to comments

 

Continuando o post anterior:

Testes:

Agora que já mostramos alguns exemplos de ordenação vamos ao motivo deste post, eu criei um conjunto de 100, 200 e 500 strings e apliquei a ordenação usando os métodos citados acima e veja o resultado:

//Array Ordenação

static string[] SortArray(string[] a)

{

    string[] res = (string[])a.Clone();

    Array.Sort(res);

    return res;

}

 

//LINQ Ordenação

static string[] SortLinq(string[] a)

{

    var res = from item in a

              orderby item ascending

              select item;

    return res.ToArray();

}

 

//List Ordenação

static List<string> SortList(List<string> l)

{

    List<string> res = new List<string>(l);

    res.Sort();

    return res;

}

 

 

 

=== Resultado – 100 strings ===

Array method: 400 ms

LINQ method:  410 ms

List method:  406 ms

 

=== Resultado – 200 strings ===

Array method: 2420 ms

LINQ method:  2990 ms

List method:  2305 ms

 

=== Resultado – 500 strings ===

Array method: 17504 ms

LINQ method:  22100 ms

List method:  16800 ms

 

 

Nota: Apesar do List ter tido um resultado mais baixo que o Array, internamente ele implementa um Array.Sort  J , se tiver curiosidade faça o reflection desta classe, você ira ver algo como : Array.Sort<T>(this._items, index, count, comparer);

 

Considerações:

Existe algumas considerações sobre string e Coleções que acho legal compartilhar:

1-      Comparações de string: Existe um monte de documentos e posts falando sobre performance e um dos itens é que quanto for fazer comparações de string evite usar stringA.Tolower() == stringB.Tolower(), e sempre que possível use string.Compare(stringA, stringB, true) == 0 (0 é verdadeiro, -1 falso), parece óbvio, mas existem muitos códigos que ainda estão da primeira forma.

2-      Se necessitar concatenar vários itens em uma string, evite usar o stringA += stringB e utilize a classe StringBuilder ela é muito mais performática para estes casos.

3-      Array vs Collection, veja : http://msdn.microsoft.com/en-us/library/k2604h5s.aspx

4-      Mais sobre Estrutura e Coleções de Dados : http://msdn.microsoft.com/en-us/library/7y3x785f.aspx

5-      String optimization: http://en.csharp-online.net/CSharp_String_Theory%E2%80%94String_Performance_Optimization

 

 

Bom é isso ai, até a próxima.

Abraço

Nelson Borges

Categorias:C#
  1. Robson Bacarin
    29 de março de 2011 às 8:58

    Hum, ordenar com lista chega a quase 25% mais rápido do que Linq…. mas e quanto ao OrderBy da List ? equivale a performance do linq ?

    • 29 de março de 2011 às 23:06

      Sim, o OrderBy utiliza o LINQ (método de extensão).

  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: