Rumah > pembangunan bahagian belakang > C++ > Adakah pengecualian C# benar -benar lebih perlahan daripada kod kembali?

Adakah pengecualian C# benar -benar lebih perlahan daripada kod kembali?

Mary-Kate Olsen
Lepaskan: 2025-01-26 12:26:09
asal
931 orang telah melayarinya

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

Kos prestasi pengecualian C#: adakah ia benar atau salah?

Prestasi luar biasa C# sentiasa menjadi kontroversi. Walaupun kehilangan prestasi tidak ketara apabila timbunan tidak mendalam, pelbagai pendapat adalah tidak konsisten.

Ujian prestasi yang tepat

Untuk menangani isu ini, kami membangunkan penanda aras yang serupa dengan penyelidikan Jon Skeet sebelum ini. Keputusan ujian menunjukkan bahawa diperlukan 29914 milisaat untuk mengendalikan satu juta pengecualian, yang bermaksud bahawa kira-kira 33 pengecualian diproses setiap milisaat. Ini menunjukkan bahawa pengecualian cukup pantas sebagai alternatif untuk mengembalikan nilai dalam kebanyakan kes.

Perbandingan dengan nilai pulangan

Walau bagaimanapun, apabila menggunakan nilai pulangan, program yang sama selesai dalam masa kurang daripada milisaat. Ini bermakna pengecualian adalah sekurang-kurangnya 30,000 kali lebih perlahan daripada nilai pulangan . Perlu diingatkan bahawa ini memakan masa minimum, dan mungkin mengambil lebih banyak masa untuk benar-benar membuang atau menangkap pengecualian.

Persekitaran ujian

Diuji pada komputer riba yang dikuasakan oleh Intel Core 2 Duo T8100 @ 2.1 GHz, menjalankan keluaran .NET 4.0, tanpa penyahpepijat didayakan.

Kod ujian

Coretan kod berikut menunjukkan perbandingan prestasi:

<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>
Salin selepas log masuk

(Nota: Kod pengecualian khusus dan kod nilai pulangan ditinggalkan di sini, ia hanyalah contoh) Kod ujian lengkap perlu memasukkan logik balingan dan pemprosesan pengecualian khusus, serta pertimbangan nilai pulangan logik . Barulah perbandingan prestasi yang lebih tepat boleh dibuat.

Atas ialah kandungan terperinci Adakah pengecualian C# benar -benar lebih perlahan daripada kod kembali?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan