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?
String i StringBuilder
Zaključano
Zakačeno
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.
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.
Potpis
Lepota je u jednostavnosti.
Cis.
Cis.
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).
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).
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
Potpis
Linux is like wigwham, no windows, no gates and apache inside...
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
Evo, Željko je sve rekao. I rest my case!
Potpis
Lepota je u jednostavnosti.
Cis.
Cis.