Strona główna > Przykłady > [C#] Najszybsza metoda zliczania linii w stringu

[C#] Najszybsza metoda zliczania linii w stringu

Trafiłem dzisiaj na ciekawy artykuł, którego autor testuje szybkość wykonania różnych metod mających na celu zwrócenie ilości linii zawartych w zmiennej typu string.

Użyte zostały m.in. wyrażenia regularne

static Regex r = new Regex("\n", RegexOptions.Multiline);
static long LinesCountRegex(string s)
{
     MatchCollection mc = r.Matches(s);
     return mc.Count;
}

LINQ

static long LinesCountLinq(string s)
{
      return (from ch in s
              where ch == '\n'
              select ch).Count();
}

static long LinesCountLinqCount(string s)
{
       return s.Count(c => (c == '\n'));
}

wskaźniki

unsafe static long LinesCountUnsafePtr(string s)
{
       long lineCount = 1;
       fixed (char* pchar = s)
       {
             char* p = pchar;
             for (; *p != '\0'; p++)
             {
                  if (*p == '\n') lineCount++;
             }
        }
        return lineCount;
}

ale najszybsze rozwiązanie okazało się nie być związane z żadną wyszukaną techniką.

static long LinesCount4(string s)
{
     long count = 0;
     int position = -1;
     while ((position = s.IndexOf('\n', position + 1)) != -1)
     {
         count++;
     }
     return count;
}
Advertisements
Kategorie:Przykłady Tagi: , , , ,
  1. 27 lutego 2012 o 8:50 am

    Pytanie tylko po co szukać najszybszej? Czy liczenie liczby linii w pliku jest krytyczną funkcją w kodzie, która wykonuje się tysiące razy na sekundę?

    Jako ciekawostka – tak. Ale mam nadzieję, że nikt nie optymalizuje metody zwracającej liczbę linii w pliku. Wystarczy szybkie proste: File.ReadAllLines(„nazwa”).Length i po sprawie…

    Paweł

  1. 26 lutego 2012 o 8:02 pm

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

%d blogerów lubi to: