sobota, 5 października 2013

Zadałem sobie pytanie: Czy
var text = String.Format("{0}{1}{2}{3}{4}{5}", "str", 10, " ", ";", "*", "$");

jest mniej zasobożerne od
var text = "str" + 10 + " " + ";" + "*" + "$";

Aby odpowiedzieć na to pytanie napisałem program w którym milion razy wykonywane są wyżej wymienione operacje i wykonałem kilka testów przy pomocy analizatora wydajności w VS (Analyze -> Launch Performance Wizard...). Projekt jest do pobrania TUTAJ...

Odpowiedź brzmi: String.Format() NIE jest bardziej wydajnym rozwiązaniem od zwykłego dodawania czyli od String.Concat(). Wyniki testów wydajności są TUTAJ...

Z testów wynika że string.Format jest bardziej zasobożerny jeśli chodzi o czas wykonywania i zużycie procesora, natomiast pod względem zużycia pamięci podręcznej jest remis. Przyczyną mniejszej wydajności to konieczność dodatkowego parsowania stringa "{0}{1}{2}{3}{4}{5}".

Wyniki testów:

  • CPU Sampling - Inclusive Sample - 61.11% do 38.89% na niekorzyść String.Format 
  • Instrumentation – Elapsed Inclusive Time - 60.25 do 39.24 na niekorzyść String.Format 
  • .NET Memory Allocation – Bytes - 29.09% do 29.06 
Pozostawiam sobie rozkminę po za treścią tego posta czy nie lepiej byłby w takiej sytuacji użyć StringBuilder'a, jak poniżej:
var sb = new StringBuilder();
text = sb.Append("str").Append(10).Append(" ").Append(";").Append("*").Append("$").ToString();

0 komentarze :

Prześlij komentarz