Das ist effizienter Cstr(Wert) oder Wert.ToString()
Ich bin, Fragen, was effizienter ist, mit CStr() oder object.toString().
Der Grund warum ich Frage dies, weil ich doch CStr() gemacht wurde, zu berufen .ToString () - Methode auf das Objekt, das es zu tun hatte.
Aber wenn Sie vor kurzem unter Verwendung einer generischen Methode ohne Einschränkungen hatte ich mit dem Objekt.ToString() statt CStr(Objekt), das folgende ist rein ein Beispiel zur Verdeutlichung des Problems.
Public Function IDFromObject(Of ID_TYPE)(ByVal value As ID_TYPE) As String
Return value.ToString
End Function
Zusammengestellt als erwartet, aber die folgenden nicht mit CStr(). Es gab einen Kompilierungsfehler Wert vom Typ ID_TYPE kann nicht in eine Zeichenfolge konvertiert werden. Aber es kann offensichtlich mit .ToString()
Public Function IDFromObject(Of ID_TYPE)(ByVal value As ID_TYPE) As String
Return CStr(value)
End Function
- Stellen Sie sicher, dass, wenn Sie testen, dass Sie Sie kompilieren für die VERSION mit Optimierungen. Wenn Sie dies ausführen im debug-vor allem in der IDE, die Ergebnisse werden ganz anders sein.
- Beachten Sie, dass (A) CStr(x) arbeitet für null-Werte, sondern x.ToString() schlägt fehl, und (B) Enums sind Verschieden; CStr(e) gibt "2", aber e.ToString() gibt "LeftToRight"
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vom hier (konnte Sie nicht sagen, dass es besser ist):
Zur besseren Lesbarkeit Willen, wenn ich in die Notwendigkeit, code zu schreiben, in VB.NET (ich bin ein C# - Programmierer), würde ich vermeiden, die VB-spezifische keywords/Funktionen soweit wie möglich. Durch die Nutzung .NET-Klassen und-Methoden nur, der code wird verständlicher sein, die von Menschen verwendet werden, zu entwickeln, in der anderen .NET-Sprachen. Nicht zu erwähnen, dass diese Funktionen gibt es vor allem für die Kompatibilität mit VB6 und Sie sehen ein bisschen aus der Ort im Vergleich zu die .NET Weg, Dinge zu tun.
Natürlich kann es sinnvoll sein, Ausnahmen, manchmal VB.NET macht wirklich sehr einfach zu tun, bestimmte Aufgaben, und es kann bequem sein, dies zu nutzen; aber als Allgemeine Regel würde ich nicht verwenden VB.NET Besondere Funktion hat.
Hier ist der code von oben testen, aber überarbeitet und mit System.Diagnostik.Stoppuhr, und entfernen Sie die Konsole.schreiben Engpass.
Es stellt sich heraus, directcasting ist am schnellsten(genauso sollte es sein, ist es aber nicht etwas zu tun in diesem Fall. Jedoch ist Ihre ein banalisiert Beispiel, weil seine seltenen, die Sie möchten, um zu konvertieren eine Zeichenfolge in eine Zeichenfolge. Konvertieren
Module Module1
Sub Main()
Ende Modul
Meine Ergebnisse:
(string ) : ToString : 2288; CStr: 2275; DirectCast: 1586
(integer) : ToString : 10526; CStr: 13184; TryCast: 982
Einen GROßEN Unterschied zwischen CStr wie ToString ist der Umgang mit Enum-Variablen.
CStr gibt die zugrunde liegende Zahl z.B. "2" und ToString liefert den Enum-Namen z.B. "LeftToRight"
Sie sind zwei völlig verschiedene Dinge, CStr ist eine überladene Funktion, die wandelt die Daten in bestimmte Arten in einen string, während die ToString-Methode aufgerufen, die alle .net-Objekte haben, und die Sie außer Kraft setzen können, die aber standardmäßig enthält der name des Objekts. ToString liefert dann nur die Daten von einem Typ, wenn es außer Kraft gesetzt wurde, dies zu tun.
Hier die Ergebnisse von einem kleinen test, den ich gemacht:
Ergebnisse:
Macht es sicher, dass
CStr
ist der Schnellste, dann gehtDirectCast
und schließlichToString
mit höchste Leistung Kosten.Habe ich versucht mal die folgenden zwei Unterprogramme (verzeihen Sie meine Benennung von Variablen):
und
wo
den
ToString()
Schleife dauert 62 Sekunden und derCStr()
Schleife dauert 64 Sekunden. Es ist wirklich nicht einen großen Einfluss meiner Meinung nach, wenn Sie sind nur den Umgang mit zahlen. Ich deaktiviert alle compiler-Optimierung während der timing-Prozess.CStr(Objekt) ist ein cast (entspricht (string) - Objekt in C#) und wirft esxception, wenn da ein null-Objekt oder ein Objekt, das nicht gegossen werden zu einem string. Aber .ToString() wird auf jede Art von Objekt (da die Umsetzung in die Objekt-Klasse) und wenn nicht überschrieben durch die aktuelle Klasse wird wieder die Basis-ToString () - Methode. In Ihrem Fall müssen Sie überschreiben die ToString () - Methode in Ihrer ID_TYPE Klasse und zurück die Zeichenfolge, die Sie brauchen.