Kejutan prestasi dengan ""as"" dan jenis boleh batal
Artikel ini menyiasat perbezaan prestasi antara menggunakan operator ""as"" dan semakan tradisional ""adalah"" diikuti dengan pelakon apabila bekerja dengan jenis boleh batal.
Pada mulanya, diandaikan bahawa pengendali ""sebagai"" akan menjadi lebih cekap kerana ia seolah-olah memudahkan semakan jenis dinamik dan semakan nilai ke dalam satu langkah. Walau bagaimanapun, hasil penanda aras mendedahkan bahawa semakan ""adalah"" tradisional adalah lebih pantas, malah mengatasi prestasi penyelesaian LINQ.
Sebab utama percanggahan ini terletak pada pelaksanaan pemutus jenis boleh batal. Tidak seperti penukaran nilai antara jenis primitif, menukar nilai berkotak kepada jenis boleh batal memerlukan proses yang lebih kompleks, melibatkan penyahkotak dan semakan jenis enum yang mungkin. Proses ini dikendalikan oleh fungsi pembantu CLR JIT_Unbox_Nullable, yang menjana lebih banyak arahan kod mesin dan menggunakan sumber yang banyak.
Perlu diperhatikan bahawa pengkompil JIT mengoptimumkan kod untuk senario di mana jenis objek diketahui dan konsisten dengan sasaran taip. Dalam kes semakan ""adalah"" tradisional, pengoptimum boleh menjana kod yang lebih cekap yang secara langsung menyahkotak nilai dengan overhed minimum.
Walaupun pengendali ""sebagai"" memudahkan kebolehbacaan kod, penggunaannya dalam situasi sensitif prestasi harus dipertimbangkan dengan teliti. Adalah disyorkan untuk menggunakan gabungan semak dan hantar ""adalah"" tradisional untuk prestasi yang lebih baik, terutamanya apabila bekerja dengan jenis boleh batal.
Atas ialah kandungan terperinci Adakah 'sebagaimana' Sentiasa Lebih Cepat Daripada 'adalah' dengan Jenis Nullable dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!