Der Leistungsaufwand von C#-Ausnahmen: Ist er wahr oder falsch?
Die außergewöhnliche Leistung von C# war schon immer umstritten. Obwohl der Leistungsverlust nicht signifikant ist, wenn der Stapel nicht tief ist, sind verschiedene Meinungen widersprüchlich.
Genaue Leistungstests
Um dieses Problem anzugehen, haben wir einen Benchmark entwickelt, der der früheren Forschung von Jon Skeet ähnelt. Die Testergebnisse zeigen, dass die Bearbeitung einer Million Ausnahmen 29914 Millisekunden dauert, was bedeutet, dass jede Millisekunde ungefähr 33 Ausnahmen verarbeitet werden. Dies zeigt, dass Ausnahmen in den meisten Fällen als Alternative zur Rückgabe von Werten schnell genug sind.
Vergleich mit Rückgabewert
Bei Verwendung des Rückgabewerts wird dasselbe Programm jedoch in weniger als einer Millisekunde abgeschlossen. Dies bedeutet, dass Ausnahmen mindestens 30.000 Mal langsamer sind als Rückgabewerte . Es ist zu beachten, dass diese nur minimal zeitaufwändig sind und es möglicherweise länger dauert, tatsächlich Ausnahmen auszulösen oder abzufangen.
Testumgebung
Getestet auf einem Laptop mit Intel Core 2 Duo T8100 bei 2,1 GHz und .NET 4.0-Version, ohne aktivierten Debugger.
Testcode
Der folgende Codeausschnitt zeigt den Leistungsvergleich:
<code class="language-csharp">static void Main(string[] args) { int iterations = 1000000; Console.WriteLine("Starting " + iterations.ToString() + " iterations...\n"); var stopwatch = new Stopwatch(); // 异常测试 stopwatch.Reset(); stopwatch.Start(); for (int i = 1; i <= iterations; i++) { try { // ... 异常代码 ... } catch (Exception) { // ... 异常处理 ... } } stopwatch.Stop(); Console.WriteLine("Exceptions: " + stopwatch.ElapsedMilliseconds + "ms"); // 返回值测试 stopwatch.Reset(); stopwatch.Start(); for (int i = 1; i <= iterations; i++) { // ... 返回值代码 ... } stopwatch.Stop(); Console.WriteLine("Return Codes: " + stopwatch.ElapsedMilliseconds + "ms"); }</code>
(Hinweis: Der spezifische Ausnahmecode und der Rückgabewertcode werden hier weggelassen, es handelt sich nur um ein Beispiel) Der vollständige Testcode muss eine spezifische Ausnahmeauslösungs- und Verarbeitungslogik sowie eine Rückgabewertbeurteilung enthalten Logik. Nur dann kann ein genauerer Leistungsvergleich durchgeführt werden.
Das obige ist der detaillierte Inhalt vonSind C# -Annahmen wirklich so viel langsamer als Rückgabescodes?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!