[ Voodoo @ 14.04.2005. 22:38 ] @
Nov sam u C#-u (ali nisam u Delphiju) pa me malo buni postojanje tipova String i StringBuilder. Koliko sam shvatio, String predstavlja fiksan niz, a svaka modifikacija u stvari pravi novi (takodje fiksan) niz i premesta pokazivac na njega, dok je StringBuilder analogan AnsiStringu u Delphiju (dinamicki "lanac" znakova koji se menja svakom modifikacijom, interno izveden tako da svaki element cini znak i pokazivac na adresu sledeceg elementa). Da li gresim i gde?
[ Mrav @ 15.04.2005. 02:15 ] @
StringBuilder podržava više operacija za ubacivanje i nastavljanje stringa, kao i izbacivanje delova.

U praksi treba ga koristiti kada treba napraviti veći ili kompleksniji string, zapravo on se koristi kao neka vrsta bafera u koji ćeš ispisati ono što ti je potrebno (recimo html sadržaj strane, mada postoje i klase prilagođene baš za ovo), a onda ga "flushovati" metodom ToString(), dok se običan String ponaša više kao klasičan niz znakova.

Što se tiče tvojih konstatacija u vezi alokacije Stringa, potpuno su tačne, String predstavlja niz Char-ova, a svaka operacija koja menja njegov sadržaj u stvari vraća referencu na novoalocirani String.
[ Voodoo @ 15.04.2005. 09:00 ] @
Zahvaljujem.

Pretpostavljao sam da onda treba koristiti StringBuilder za operacije gde se barata velikim stringovima koji se cesto menjaju (recimo citanje tekstualnog fajla znak po znak i upisivanje u string).
[ dezelin32 @ 15.04.2005. 14:54 ] @
Citat:
Pretpostavljao sam da onda treba koristiti StringBuilder za operacije gde se barata velikim stringovima koji se cesto menjaju (recimo citanje tekstualnog fajla znak po znak i upisivanje u string).


StringBuilder koristis kad god hoces da postignes bolje performanse u baratanju stringovima, a i fleksibilniji je za recimo konkatenaciju stringova u petlji. Ima bolje performanse u odnosu na operacije tipa System.String i zauzima duplo manje memorije pri standardnim operacijama kao sto je konkatenacija.

string a = new string[1000];
string b = new string[2000];

string c = a + b; je sporije i uzima priblizno duplo vise memorije nego:

StringBuilder builder = new StringBuilder();
builder.Append(a);
builder.Append(b);
string c = builder.ToString();

Ziveli,
Aleksandar Dezelin
[ Željko @ 15.04.2005. 16:05 ] @

Samo da potvrdim tvrdje Mrav-a i dezelin32-a, iz licnog iskustva mogu reci da StringBuilder klasa ima neuporedivo bolje performanse pri operacijama sa velikim stringovima.

pozdrav Željko
[ Mrav @ 15.04.2005. 20:39 ] @
Evo, Željko je sve rekao. I rest my case!