W tym konkretnym przypadku, dwa są właściwie identyczne. Kompilator przekształci drugi wariant, ten przy użyciu operatora +
, w wywołanie Concat, pierwszego wariantu.
Cóż, to znaczy, jeśli dwa faktycznie zawierały zmienne łańcuchowe, które zostały połączone.
ten kod:
B = "abc" + "def";
rzeczywiście przekształca się to bez konkatenacji w ogóle:
B = "abcdef";
Można to zrobić ponieważ wynik dodawania mogą być obliczane w czasie kompilacji, więc kompilator to robi.
Jednakże, jeśli było użyć czegoś takiego:
A = String.Concat(stringVariable1, stringVariable2);
B = stringVariable1 + stringVariable2;
Wtedy ci dwaj będą generować ten sam kod.
Chciałbym jednak wiedzieć, co dokładnie powiedzieli ci "wielu", ponieważ uważam, że jest inaczej.
To, co myślę, że powiedzieli, to że konkatenacja łańcuchów jest zła i powinieneś użyć StringBuilder lub podobnego.
Na przykład, jeśli to zrobić:
String s = "test";
for (int index = 1; index <= 10000; index++)
s = s + "test";
To co się dzieje, jest to, że dla każdej iteracji przez pętlę, można zbudować jeden nowy łańcuch i niech stara się kwalifikować do zbierania śmieci.
Dodatkowo, każdy taki nowy ciąg będzie zawierał całą zawartość starego, co oznacza, że będziesz przenosić dużą ilość pamięci.
Zważywszy następującego kodu:
StringBuilder sb = new StringBuilder("test");
for (int index = 1; index <= 10000; index++)
sb.Append("test");
Czy zamiast użyć bufor wewnętrzny, który jest większy niż to, co musi być, tylko w przypadku trzeba dołączyć do niej więcej tekstu. Kiedy bufor się zapełni, zostanie przydzielony nowy, większy, a stary pozostanie do zbierania śmieci.
Jeśli chodzi o wykorzystanie pamięci i wykorzystanie procesora, późniejszy wariant jest znacznie lepszy.
Poza tym staram się unikać zbytniego skupiania się na "jest wariant kodu X lepszy niż Y", poza tym, z czym już masz doświadczenie. Na przykład używam StringBuilder teraz tylko dlatego, że jestem świadomy tej sprawy, ale to nie znaczy, że cały kod, który piszę, że go używa, faktycznie tego potrzebuje.
Staraj się nie tracić czasu na mikrooptymalizację kodu, dopóki nie zauważysz, że masz wąskie gardło. W tym czasie nadal obowiązuje zasada dotycząca pierwszego pomiaru, późniejszego cięcia.
Z ciągami o tym rozmiarze, to nie ma znaczenia –