2017-06-15 2 views
-3

Ich habe eine Methode in vielen meiner Klassen, die normalerweise nur eine Zeichenfolge aus einer Liste oder einem Wörterbuch zurückgeben. Überprüfen Sie das folgende Beispiel aus ...C#: Was wäre schneller, wie viel und warum?

public string GetValueByKey(string key) 
{ 
    if (!_configItems.TryGetValue(key, out string value)) 
    { 
     Logger.Warn($"Key not found: {key}"); 
    } 

    return value; 
} 

public int GetValueByKeyInt(string key) 
{ 
    if (!_configItems.TryGetValue(key, out string value)) 
    { 
     Logger.Warn($"Key not found: {key}"); 
    } 

    return int.Parse(value); 
} 

Was will ich wissen, ist, wäre es besser, die GetValueByKeyInt zu nutzen oder wäre es besser, die zu verwenden GetValueByKey und int.Parse() es an der Stelle, die Sie die Methode aufrufen?

+0

was meinst du mit "wie viel"? – Raptor

+5

es wird nicht viel ausmachen, wenn Sie zuerst zurückgeben dann analysieren oder parse kurz vor der Rückkehr – EpicKip

+0

Was ich damit gemeint war, wäre es eine faire Menge? Wenn es wäre, würde ich am schnellsten verwenden, aber wenn es nicht so viel wäre, würde ich die int-Methode zur einfachen Verwendung verwenden. – Seriosk

Antwort

0

GetValueByKeyInt wird per Definition langsamer sein. Genau Wie viel langsamer hängt von vielen Dingen ab. Welche Version des Frameworks verwenden Sie? 32-Bit oder 64-Bit? Welcher JITER? Welches OS? Welcher Prozessor? usw.

Grundsätzlich funktioniert GetValueByKeyInt mehr Arbeit (es ruft Int.Parse während der andere Code nicht - und ansonsten sind sie gleich) - so muss es langsamer sein. Wenn TryGetValue den Wert false zurückgibt, wird auch int.Parse eine Ausnahme auslösen (was einen ziemlich großen Leistungseinbruch bedeutet). Sie möchten wahrscheinlich stattdessen TryParse verwenden.

Aber ehrlich gesagt, sollten Sie Benchmark, um festzustellen, ob es für Ihren Kontext wichtig ist. Und es hängt weitgehend davon ab, ob das, was Sie wollen, ein int oder eine Zeichenkette ist. Wenn Sie einen Int wollen, wird GetValueByKeyInt langsamer sein - aber es wird Ihnen geben, was Sie wollen (was wichtiger ist).

Verwandte Themen