首頁 > 後端開發 > C++ > 為什麼 C# 的「as」運算子在此可空整數求和測試中比傳統轉換慢?

為什麼 C# 的「as」運算子在此可空整數求和測試中比傳統轉換慢?

Linda Hamilton
發布: 2025-01-07 09:11:40
原創
255 人瀏覽過

Why is C#'s

“as”和可空類型的性能驚喜

背景

背景

“ C# 中的運算子允許動態類型檢查和安全轉換。與傳統的“is”運算符後跟強制轉換相比,這可能會提高效能。然而,在最近的測試案例中觀察到了意外的效能結果。

測試應用程式和結果

開發了一個測試應用程式來對包含空引用的物件數組中的整數進行求和、字串引用和裝箱整數。該應用程式使用了三種方法:「Cast」(C# 1 等效項)、「As」(使用「as」運算子)和「LINQ」(使用 OfType() 擴充方法)。令人驚訝的是,「Cast」方法明顯快於「As」方法,而「As」方法又比「LINQ」方法稍慢。

分析

JIT 編譯器可以為「Cast」方法產生高效率的程式碼,因為它利用記憶體中值轉換。物件只能拆箱為與裝箱值類型相同的變量,這簡化了轉換過程。

「As」方法需要轉換為 Nullable;因為裝箱整數的值表示與 Nullable 的記憶體佈局不相容。這是透過輔助函數 JIT_Unbox_Nullable 完成的,它會帶來額外的開銷。 「LINQ」方法採用「is」運算子並透過輔助函數 JIT_Unbox() 進行通用轉換。雖然它的性能比“As”方法稍好,但由於 ngen.exe 優化,它仍然較慢。

結論「as」運算子可能並不總是與「Cast」方法相比,可提供效能優勢,尤其是在效能敏感的情況下。雖然「LINQ」方法是一種可行的替代方案,但它也可能會遇到效能限制。因此,在選擇最佳方法之前,考慮具體情況並權衡利弊非常重要。

以上是為什麼 C# 的「as」運算子在此可空整數求和測試中比傳統轉換慢?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板