Comparação de Strings


Como sabemos, o .NET Framework nos fornece várias formas de compararmos Strings. Pois bem, isso me deixou bastante curioso, visto que com estas opções, saber qual é a mais rápida. Não sei se o teste de performance que criei é lá o ideal, mas deu para ter uma idéia.

O teste consiste em um laço For … Next de 0 até 1.000.000.000, onde dentro do laço eu utilizo as comparações de Strings. O teste foi realizado para quando as Strings são iguais e também quando são diferentes, e o resultado é interessante por causa que dependendo se as Strings forem iguais uma forma é mais rápida, ao contrário de elas forem diferentes, ou seja, um outro método é mais eficaz. Vamos então ver a estrutura do código que escrevi para o teste/comparação:

        Dim d1 As DateTime
        Dim d2 As DateTime
        Dim t As TimeSpan
        Dim s1 As String = “valor1”
        Dim s2 As String = “valor1”

        GC.Collect()

        d1 = DateTime.Now
        For i As Integer = 0 To 1000000000
                ‘Aqui a comparação (abaixo)
        Next
        d2 = DateTime.Now
        t = d2.Subtract(d1)
        Console.WriteLine(t.ToString())

Pois bem, com esta mesma estrutura utilizei as tres formas de comparação de Strings para testá-las. As condicionais são:

            [ Forma 1 ]
                        If String.Equals(s1, s2) Then
                        End If

            [ Forma 2 ]
                        If s1 = s2 Then
                        End If

            [ Forma 3 ]
                        If s1.Equals(s2) Then
                        End If

Os testes foram feitos para quando as Strings (s1, s2) foram iguais quanto diferentes. Para ser sincero, eu imaginei que poderia haver alguma diferença, mas que seria algo mínimo, questões de milisegundos, mas depois do teste, vi que se elas forem iguais, o custo é um pouco maior para alguns dos casos. Abaixo os resultados que obtive:

            [ Strings Iguais ]
                        Forma 1 – 00:00:07.7962762
                        Forma 2 – 00:00:35.2941642
                        Forma 3 – 00:00:25.6074082

            [ Strings Diferentes ]
                        Forma 1 – 00:00:28.8443038
                        Forma 2 – 00:00:30.4536014
                        Forma 3 – 00:00:24.3753120

Os testes foram feitos em um PC com a seguinte configuração: P4, 3Ghz, 512RAM, e monitor LCD 😛

Bem, fica aí os testes. Ainda não consegui identificar o porque um é mais rápido que o outro. Se alguém souber, e quiser compartilhar, fique a vontade.

Anúncios

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