Rumah > pembangunan bahagian belakang > C++ > Mengapa pengendali C# 'as' lebih perlahan daripada 'is' dengan jenis nullable?

Mengapa pengendali C# 'as' lebih perlahan daripada 'is' dengan jenis nullable?

DDD
Lepaskan: 2025-01-07 09:22:45
asal
544 orang telah melayarinya

Why is the C#

Perbezaan Prestasi Tidak Dijangka dengan Operator "as" dan Jenis Nullable dalam C#

Operator "as" dalam C# menyediakan cara yang mudah untuk dilakukan taip semak dan hantaran secara dinamik. Walaupun nampaknya menggunakan "sebagai" dengan jenis boleh batal akan menawarkan peningkatan prestasi berbanding pengendali dan penghantaran "adalah" tradisional, ujian baru-baru ini telah mendedahkan keputusan yang mengejutkan.

Dalam senario ujian di mana tatasusunan objek mengandungi campuran daripada integer, rentetan dan rujukan nol, pengendali "sebagai" jauh lebih rendah prestasinya berbanding dengan pengendali "adalah". Ini adalah tidak dijangka, kerana seseorang akan menganggap bahawa gabungan pengendali "sebagai" semakan jenis dan semakan nilai akan menjadi lebih cekap daripada menanyakan jenis dinamik dua kali.

Menganalisis pelaksanaan .NET bagi "isinst" untuk jenis nullable mendedahkan bahawa ia tidak terlalu perlahan. Sebaliknya, isu ini nampaknya berpunca daripada langkah penyahkotak tambahan yang diperlukan apabila menggunakan "sebagai" dengan jenis yang boleh dibatalkan.

Pengkompil JIT boleh menjana kod yang sangat dioptimumkan untuk pengendali "adalah" dan menghantar untuk jenis yang tidak boleh dibatalkan. Walau bagaimanapun, "as" dengan jenis nullable memerlukan fungsi pembantu JIT yang lebih kompleks untuk melaksanakan penyahkotak dan penukaran kepada Nullable. Fungsi ini mempunyai overhed yang lebih tinggi daripada semakan dan penghantaran jenis langsung yang digunakan dalam pengendali "adalah".

Penyelesaian LINQ, yang menggunakan "OfType()" dan hantaran kepada jenis generik, juga berprestasi lebih teruk daripada pengendali "adalah". Ini boleh dikaitkan dengan fungsi pembantu JIT, JIT_Unbox(), yang dipanggil semasa penghantaran ke Nullable.

Kesimpulannya, sementara operator "as" menyediakan sintaks yang mudah, ia mungkin tidak selalu menawarkan prestasi terbaik apabila bekerja dengan jenis nullable. Dalam senario kritikal prestasi, adalah dinasihatkan untuk menggunakan pengendali "adalah" dan hantaran terus kepada jenis yang diingini.

Atas ialah kandungan terperinci Mengapa pengendali C# 'as' lebih perlahan daripada 'is' dengan jenis nullable?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan