Jaki jest najskuteczniejszy sposób łączenia łańcuchów?
StringBuilderprzypadków użycia można znaleźć tutaj .
String.Formatna 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ż StringBuilderprzy 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 StringBuilderdo mojego zestawu narzędzi. Z tymi dwoma sposobami jesteś ustawiony.
String.Joinodpowiedź 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.Concati String.Joinoba mogą działać na tablicach, ale w String.Joinrzeczywistości jest szybszy. Najwyraźniej String.Joinjest dość wyrafinowany i bardziej zoptymalizowany niż String.Concat, częściowo dlatego, że działa podobnie do StringBuildertego, że najpierw oblicza długość łańcucha, a następnie konstruuje ciąg korzystający z tej wiedzy za pomocą UnSafeCharBuffer.
String.Joinwymaga także zbudowania tablicy, która wydaje się nieefektywna pod względem zasobów, prawda? ... Okazuje się +i String.Concatkonstruuje tablice dla swoich składników. W związku z tym ręczne tworzenie tablicy i karmienie jej String.Joinjest stosunkowo szybsze ... jednak StringBuilderwciąż przewyższa String.Joinpraktycznie 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.Joinjeśli masz stworzyć na miejscu tablicę.