Jaki jest najskuteczniejszy sposób łączenia łańcuchów?
StringBuilder
przypadków użycia można znaleźć tutaj .
String.Format
na sterydach. Co pod względem wydajności jest nieco wolniejsze na jednej linii niż +
i String.Concat
, ale znacznie lepsze niż te, choć wolniejsze niż StringBuilder
przy wielu połączeniach. Praktycznie rzecz biorąc, różnice w wydajności są takie, że gdybym musiał wybrać tylko jeden sposób konkatenacji, wybrałbym interpolacje ciągów przy użyciu $
... Jeśli dwa sposoby, dodaj StringBuilder
do mojego zestawu narzędzi. Z tymi dwoma sposobami jesteś ustawiony.
String.Join
odpowiedź nie oddaje +
sprawiedliwości i jest praktycznie złym sposobem łączenia łańcuchów, ale jest zaskakująco szybka pod względem wydajności. Odpowiedź dlaczego jest interesująca. String.Concat
i String.Join
oba mogą działać na tablicach, ale w String.Join
rzeczywistości jest szybszy. Najwyraźniej String.Join
jest dość wyrafinowany i bardziej zoptymalizowany niż String.Concat
, częściowo dlatego, że działa podobnie do StringBuilder
tego, że najpierw oblicza długość łańcucha, a następnie konstruuje ciąg korzystający z tej wiedzy za pomocą UnSafeCharBuffer.
String.Join
wymaga także zbudowania tablicy, która wydaje się nieefektywna pod względem zasobów, prawda? ... Okazuje się +
i String.Concat
konstruuje tablice dla swoich składników. W związku z tym ręczne tworzenie tablicy i karmienie jej String.Join
jest stosunkowo szybsze ... jednak StringBuilder
wciąż przewyższa String.Join
praktycznie każdy praktyczny sposób, podczas gdy $
jest tylko nieco wolniejsze i znacznie szybsze przy długich ciągach… nie wspominając o tym, że korzystanie z niej jest niewygodne i brzydkie, String.Join
jeśli masz stworzyć na miejscu tablicę.