s[0].ToString()=="v"
C# .Net
Macht es wirklich einen Unterschied? Oder bin ich einfach zu pedantisch?
string s = "sdsddd";
Das erste Zeichen soll nun auf "v" geprüft werden.
Mir wäre folgende Implementation eingefallen -> s[0]='v'
Gefunden in einem Stück Code habe ich: s[0].ToString() == "v"
Mir gefällt es nicht (Bad Smell!)
Ist dies bei der heutigen Rechnerleistung einfach zu pedantisch, penibel und kleinkariert?
Oder sollte man auch bei genug Power im Rechner unnötige Konvertierungen vermeiden?
Gruß JJR
Kategorie Macht es wirklich einen Unterschied? Oder bin ich einfach zu pedantisch?
string s = "sdsddd";
Das erste Zeichen soll nun auf "v" geprüft werden.
Mir wäre folgende Implementation eingefallen -> s[0]='v'
Gefunden in einem Stück Code habe ich: s[0].ToString() == "v"
Mir gefällt es nicht (Bad Smell!)
Ist dies bei der heutigen Rechnerleistung einfach zu pedantisch, penibel und kleinkariert?
Oder sollte man auch bei genug Power im Rechner unnötige Konvertierungen vermeiden?
Gruß JJR
Kommentare
erstens: ...=='v' erzeugt lediglich ein System.Char auf dem Stack (Value-Type) während ...=="v" ein System.String-Objekt (Reference-Type) auf dem Heap instantiiert inkl. dem obligatorischen Aufruf des Konstruktors und notwendiger Übergabe des Zeichens "v" als Argument
zweitens: die MSDN verrät, dass der Indexer von System.String schon ein char liefert, d.h. s[0] ergiebt ein System.Char und könnte direkt mit 'v' verglichen werden wobei der Vergleich mit "v" die Konvertierung zum String notwendig macht...
drittens: hintendran kommt bei der zweiten Variante zu allem Überfluss noch Arbeit für den GC weil das String-Objekt ja auch irgendwie wieder vom Heap entfernt werden muss
Alles in allem also doppelt dumm gelaufen bei der zweiten Variante, Konvertierung und Objekt-Instantiierung sind beide überflüssig. Das sieht man übrigens auch recht einfach daran, dass deren MSIL-Code ungefähr doppelt so lang ist obwohl es das gleiche macht
Man könnte nun tatsächlich von Kleinkariertheit reden, aber in einer Schleife die jeden Tag ein Million mal läuft und Teil einer Software für einen geschäftskritischen Prozess mit mehr als 100 TSD Euro Umsatz am Tag ist kann das auch in Zeiten von billiger Rechentechnik ausschlaggebend sein... und wer wünscht sich schon eine Situation im Produktivbetrieb bei der innerhalb von 15 Minuten mit wütendem Auftraggeber im Rücken die dadurch hervorgerufene OutOfMemoryException schnell gefixt werden muss weil man ansonsten mächtig was auf die Löffel bekommt
So, nun aber genug gewettert - bevor noch jemand ein Code-Stückchen aus der Vergangenheit findet wo ich auch hart ein Zeichen einer Zeichenkette gegen einenen String der Länge 1 vergleiche
Erstellt von Sebastian Stricker um 10:15:52 PM am 03/31/2009 | - Website - |
das hört sich ja so an, als würdet Ihr Exceptions zählen
Gruß JJR
Erstellt von JakeJBlues um 08:31:27 AM am 04/01/2009 | - Website - |