Dot-Net
裝箱和拆箱是否具有相同的性能影響?
裝箱和拆箱是否具有相同的性能影響?或者說,拆箱更快?
(如果有,能否簡要說明主要原因。)
謝謝
這部分取決於您所說的“拆箱”是什麼意思。在 IL 術語中,拆箱實際上比在 C# 中做的要少一些。在 C# 中,“拆箱”總是涉及將值複製到某處,而在 IL 中,它僅意味著檢查框的類型並以這種方式使值可用。
但是它們有不同的性能特徵:裝箱需要分配一個新對象,但不需要類型檢查。
在 IL 級別拆箱實際上只需要檢查您嘗試拆箱的對像是否真的是相同類型(或兼容的)的裝箱值。然後需要在C#版本的拆箱中添加值複製操作。
從長遠來看,我希望分配比類型檢查更昂貴,特別是因為不僅有預先分配的成本,而且還有相應的垃圾收集稍後命中。
與往常一樣,您應該在實際程式碼的上下文中評估操作的性能成本。我不認為在大多數現代 .NET 應用程序中裝箱和拆箱的成本會很大,在這些應用程序中,泛型允許您避免它們用於集合等。