Quantcast
Channel: ppedv Team Blog
Viewing all articles
Browse latest Browse all 1198

Strings, Strings, Strings...

$
0
0

.NET und C# - wir haben einen Datentypen für Zeichenketten das ist der String.

Ein String der durch eine Klasse wiedergespiegelt wird, die intern mit einem char-Array arbeitet und ich denke keine Klasse im .NET Framework hat so viel "mystisches" an sich und wird derart oft verwendet.

Eine beliebte Frage innerhalb von Schulungen ist die Performance beim Verketten von Strings - rein aus der Erfahrung war es mir bereits bekannt, dass die Verkettung mittels StringBuilder zu bevorzugen ist.

Ein String ist ein sogenannter immutable Type (unveränderlich). Das bedeutet jede Änderung an einem String resultiert in einem neuen (!) String.

Betrachtet man also folgenden Code:

string s1 = "Hallo";
string s2 = ".NET";

string s3 = "Welt";

string res = s1 + s2 + s3;

so ergibt sich daraus, dass bei der Instanzierung von s1 - s3 jeweils ein char[] allokiert wird. Bei der Addition muss man nun aber aufpassen, der erste Ausdruck ist hierbei s1+s2 dies resultiert bereits in einen weiteren string, und anschließend die addition mit s3 ergibt nochmal einen (das ist nun res). Somit haben wir hier bereits, 1,2,3,4,5 Strings im Speicher.

Viele behaupten gerne dies kann "natürlich" in vielen Fällen "vernachlässigt" werden. Aber jeder Entwickler sollte mal darüber nachdenken - wäre es viel Aufwand es anders zu schreiben? Ein kleines Beispiel dafür mit einer zeitlichen Auswertung:

Ein string Array:

var strings = new[]{ "Christian", "Giesswein", "ppedv", "C#" };

soll 10 000 miteinander verkettet werden - also ein riesiger String am Ende.

Ich hab nun einfach mal 6 Möglichkeiten verwendet um das ganze zu realisieren:

  • Mit einem normalen "+" Operator und einer inneren foreach
  • Mit einem normalen "+" Operator und einer inneren for
  • Mit der statischen Methode Concat auf dem string Datentyp
  • Mit dem StringBuilder
  • Mit einem normalen "+" Operator, einer äußeren foreach
  • Mit dem Stringbuilder und einer äußeren string.Concat

Wie erwartet gewinnt der Stringbuilder, man sieht auch gut, dass es bereits vonm Laufzeitverhalten eine große Auswirkung hat, wenn man eine Schleife auslagert sofern möglich. Interessant ist natürlich auch die Verwendung von String.Concat da dessen Verwendung sehr einfach in der Schreibweise ist und auch noch sehr gut lesbar, aber performance mäßig deutlich schneller ist.

Strings

 

Download des Projektes


Viewing all articles
Browse latest Browse all 1198

Trending Articles


Vimeo 10.7.1 by Vimeo.com, Inc.


UPDATE SC IDOL: TWO BECOME ONE


KASAMBAHAY BILL IN THE HOUSE


Girasoles para colorear


Presence Quotes – Positive Quotes


EASY COME, EASY GO


Love with Heart Breaking Quotes


Re:Mutton Pies (lleechef)


Ka longiing longsem kaba skhem bad kaba khlain ka pynlong kein ia ka...


Vimeo 10.7.0 by Vimeo.com, Inc.


FORECLOSURE OF REAL ESTATE MORTGAGE


FORTUITOUS EVENT


Pokemon para colorear


Sapos para colorear


Smile Quotes


Letting Go Quotes


Love Song lyrics that marks your Heart


RE: Mutton Pies (frankie241)


Hato lada ym dei namar ka jingpyrshah jong U JJM Nichols Roy (Bah Joy) ngin...


Long Distance Relationship Tagalog Love Quotes