Jest to kolejny z cyklu krótkich wpisów dotyczących wydajności pisanego kodu. Jeżeli chcecie zapoznać się z wprowadzeniem i/oraz poprzednim arykułem zapraszam do poprzedniego wpisu: C# - String Split
Jest to kolejny z cyklu krótkich wpisów dotyczących wydajności pisanego kodu. Jeżeli chcecie zapoznać się z wprowadzeniem i/oraz poprzednim arykułem zapraszam do poprzedniego wpisu: C# - String Split
W tym wpisie skupimy się na porównaniu następujących sposobów łączenia łańcuchów znaków:
Napiszemy krótki test pozwalający na porównianie wydajności wyżej wymienionych metod, które będą operowały na tym samym łańcuchu znaków. Czas każdego z wykonań zostanie zmierzony z pomocą klasy Stopwatch a wyniki wyświetlone na konsoli:
static void Main(string[] args)
{
string firstPart = "Audi RS6 C7 zostało zapreznetowane w roku 2013";
string secondPart = "W pod koniec 2015 roku Audi zaprezentowało wzmocnioną odmianę o nazwie RS6 Performance.";
string result = String.Empty;
// using System.Diagnostics;
Stopwatch stopwatch = new Stopwatch();
// String Interpolation
stopwatch.Start();
result = $"{firstPart} {secondPart} W tej wersji RS6 posiada 605 KM i do 100 km/h przyspiesza w 3,7 s";
Console.WriteLine("Interpolacja: " + stopwatch.ElapsedTicks.ToString());
// String Format
stopwatch.Restart();
result = String.Format("{0} {1} W tej wersji RS6 posiada 605 KM i do 100 km/h przyspiesza w 3,7 s", firstPart, secondPart);
Console.WriteLine("String.Format: " + stopwatch.ElapsedTicks.ToString());
// String Concat
stopwatch.Restart();
result = String.Concat(firstPart, secondPart, "W tej wersji RS6 posiada 605 KM i do 100 km/h przyspiesza w 3,7 s");
Console.WriteLine("String.Concat: " + stopwatch.ElapsedTicks.ToString());
// String Builder
stopwatch.Restart();
// using System.Text
StringBuilder sb = new StringBuilder();
sb.Append(firstPart);
sb.Append(secondPart);
sb.Append("W tej wersji RS6 posiada 605 KM i do 100 km/h przyspiesza w 3,7 s");
Console.WriteLine("StringBuilder: " + stopwatch.ElapsedTicks.ToString());
Console.ReadKey();
}
Jako rezultat wykonania powyższego kodu możemy zobaczyć:
Wyniki pokazują, że najszybszym typem łączenia łańcuchów znaków jest String.Concat. Możecie powiedzieć, że różnice są niewielkie – pamiętajcie jednak, że motywem przewodnim tej serii artykułów jest optymalizacja w przypadku przetwarzania 20 milionów rekordów – zaoszczędzenie kilku milisekund na jednej operacji daje niewyobrażalne rezultaty w przypadku tak ogormnej ilości danych.