Heim > Backend-Entwicklung > C++ > Sind C# -Annahmen wirklich so viel langsamer als Rückgabescodes?

Sind C# -Annahmen wirklich so viel langsamer als Rückgabescodes?

Mary-Kate Olsen
Freigeben: 2025-01-26 12:26:09
Original
931 Leute haben es durchsucht

Are C# Exceptions Really That Much Slower Than Return Codes?

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>
Nach dem Login kopieren

(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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage