Erstatte reservede ord i en streng

Tags:    c# replace

<< < 12 > >>
Jeg har en dynamisk opbygget string indeholdende en masse kolonner til en SQL streng. Derudover har jeg et array af strings med reservede ord i SQL.

I dag looper jeg gennem mit array og laver en replace af et reserveret ord med [reserveret_ord] - altså sætter [] rundt om.

Mit array indeholder vel ca. 100 reserverede ord og ikke fordi det tager vildt lang tid at løbe dem igennem og replace, men kunne man gøre det på en hurtigere måde?

Koden i dag:
Fold kodeboks ind/udCSharp kode 




Indlæg senest redigeret d. 19.09.2011 13:48 af Bruger #9814
11 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 9 karma
Sorter efter stemmer Sorter efter dato
result er af typen stringbuilder og ikke blot en string, ellers er der en del performance at hente vha en stringbuilder, frem for en string..

Kilde/Læs mere:

http://www.dotnetperls.com/replace

Fold kodeboks ind/udKode 


/J



Indlæg senest redigeret d. 19.09.2011 14:53 af Bruger #5789
Man looper bestemt hurtigere når man ikke allokerer og appender til strenge. StringBuilder er meget hurtigere at arbejde med, fordi der ikke laves samme arbejde. Al allokeringen sker til sidst.

Her er en artikel, som forklarer det samme problem i Java: http://kaioa.com/node/59
Konkatenering af strenge bliver mere og mere tidskrævende efterhånden som strengen bliver længere og længere, mens stringbuilder er konstant i tids- og hukommelesforbrug.







Indlæg senest redigeret d. 19.09.2011 13:36 af Bruger #9814
Synes det er en helt fornuftig løsning du der har.



Tak for svarene. StringBuilder er et alternativ kan jeg se. Men jeg må lige teste performance på den anden. Umiddelbart er det dog ikke et problem at loope igennem 100 elementer i et array.



Det komme an på hvor tit du gør det.
Det er ikke det at du looper, som er problemet. Det er dét at du appender til en streng i et loop. For hvert gennemløb af loopet vil du allokere en ny streng, så en stringbuilder vil være en fornuftig (og nem) optimering.



Nej du looper jo ikke hurtigere igennem af den grund.



ok ville kun tro det gik ud over hukommelsen, men du har jo nok ret (selvom vi stadig taler meget teoretisk her :=) )



Jeg har lavet min egen lille test nu med hastigheden og mit loop med 96 elementer går så hurtigt at det ikke kan måles på hverken den ene eller anden måde :-)

Så det eneste jeg vil overveje, er at bruge stringbuilder pga. ressourceforbruget. Men min result string bliver alligevel nedlagt efter hvert kald, så jeg tror ikke det kan betale sig.



Super. Dine egne målinger er meget mere værd end vores teoretiske snak :-)

Du ville nok få andre målinger hvis det skulle ske 1000 gange i sekundet, men hvis dine målinger viser, at det er ligemeget, så brug hellere den version, som giver den mest læselige kode.



<< < 12 > >>
t