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.