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