Rumah >pembangunan bahagian belakang >C++ >Adakah Operator 'as' Sentiasa Menawarkan Kelebihan Prestasi berbanding 'is' untuk Jenis Nullable dalam C#?
Dalam bab 4 C# secara Depth, jenis nullable dan operator "as" sedang dibincangkan. Secara khususnya, jangkaan ialah menggunakan "sebagai" untuk semakan jenis boleh meningkatkan prestasi berbanding semakan dan penghantaran "adalah" tradisional, kerana ia memudahkan proses kepada semakan jenis dan semakan nilai tunggal. Walau bagaimanapun, keputusan yang mengejutkan telah diperhatikan.
Untuk menilai prestasi, ujian penanda aras telah dijalankan, yang melibatkan penjumlahan integer dalam tatasusunan objek yang merangkumi banyak rujukan nol dan rujukan rentetan . Ujian mengukur masa pelaksanaan coretan kod berikut:
Menghairankan penyelidik, kod C# 1 mengatasi kedua-dua kod "as" dan kod LINQ dengan margin yang ketara.
Percanggahan prestasi dikaitkan dengan perkara berikut faktor:
Pengoptimuman Pengkompil JIT untuk "is" dan Casting:
Ujian operator "is" dan lakonan seterusnya boleh dioptimumkan oleh pengkompil JIT, menghasilkan mesin yang sangat cekap kod yang dilaksanakan dalam bilangan arahan yang minimum. Pengoptimuman ini adalah mungkin kerana jenis nilai berkotak boleh dinyahkotak terus ke dalam pembolehubah jenis yang sama tanpa sebarang penukaran nilai atau penyalinan.
Kerumitan Penukaran kepada Nullable
Mengirim ke int? menggunakan "sebagai" memerlukan proses penukaran yang lebih kompleks kerana perwakilan nilai integer berkotak berbeza daripada susun atur memori Nullable
Gelagat LINQ yang Tidak Dijangka:
The OfType () kaedah sambungan dalam LINQ juga menggunakan pengendali "adalah" dan JIT_Unbox() fungsi pembantu. Walau bagaimanapun, prestasinya adalah setanding dengan pelakon "sebagai" kepada Nullable
Walaupun pengendali "sebagai" menyediakan cara yang mudah untuk melakukan pemeriksaan jenis dan pengendalian nilai yang boleh dibatalkan, ciri prestasinya di bawah senario tertentu mungkin tidak selalu seperti yang diharapkan. Kod yang dioptimumkan yang dijana untuk "adalah" dan penghantaran dalam C# 1 kekal dengan ketara lebih pantas dalam kes yang melibatkan banyak operasi nyah kotak, menyerlahkan kepentingan mempertimbangkan implikasi prestasi apabila memilih teknik pengekodan.
Atas ialah kandungan terperinci Adakah Operator 'as' Sentiasa Menawarkan Kelebihan Prestasi berbanding 'is' untuk Jenis Nullable dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!