fredag den 10. maj 2013

Arbejde med strenge System.Text.StringBuilder

Strenge i c# er ikke value types, selvom de minder lidt om. De er reference types og gemmes på heapen (hukommelsen hvor reference types ligger). Streng er det man kalder immutable; dvs. de kan ikke ændres når de først ligger på heapen. 

System.String stiller en række metoder til rådighed for at manipulere strenge. Disse metoder kan fint anvendes hvis ressourceforbrug ikke er en bekymring. 

System.String bruger imidlertid en del ressourcer, da metoderne ikke arbejder med referencer men returnerer en ny streng i hukommelsen. Arbejder man således med en streng i et loop, kan det give rigtigt mange kopier af strenge, der skal oprettes i hukommelsen. Dette giver en del "Overhead" altså ressourceforbrug. 

En løsning på dette er at arbejde med StringBuilder Klassen, der findes i namespace System.Text. Ved at lave et StringBuilder objekt, kan man bruge metoder som Append og Remove på dette objekt uden at lave nye strenge i hukommelsen.

Eks 1.


        System.Text.StringBuilder sb = new StringBuilder();
        // Opretter et StringBuilder objekt sb

        sb.Append("Her er en streng");
        // Tilføjer streng til sb

        sb.Remove(0, 4);
        // Fjerner karakter i index 0-3 i sb streng

        sb.Replace("er", "Dette er");
        // Erstatter ordet "er" med "Dette er"

sb indeholder nu "Dette er en streng"

Ovenstående viser er et simpelt eksempel på brugen af metoderne Append, Remove og Replace. Istedet for System.Text.StringBuilder kan namespace System.Text selfølgelig importeres

using System.Text;

Der er flere overloadede versioner af metoderne Append, Remove ogg Replace, der gør, at man kan manipulere en streng helt efter ens eget hoved.

Ingen kommentarer:

Send en kommentar