Dot-Net

裝箱和拆箱是否具有相同的性能影響?

  • November 18, 2021

裝箱和拆箱是否具有相同的性能影響?或者說,拆箱更快?

(如果有,能否簡要說明主要原因。)

謝謝

這部分取決於您所說的“拆箱”是什麼意思。在 IL 術語中,拆箱實際上比在 C# 中做的要少一些。在 C# 中,“拆箱”總是涉及將值複製到某處,而在 IL 中,它僅意味著檢查框的類型並以這種方式使值可用

但是它們有不同的性能特徵:裝箱需要分配一個新對象,但不需要類型檢查。

在 IL 級別拆箱實際上只需要檢查您嘗試拆箱的對像是否真的是相同類型(或兼容的)的裝箱值。然後需要在C#版本的拆箱中添加值複製操作。

從長遠來看,我希望分配比類型檢查更昂貴,特別是因為不僅有預先分配的成本,而且還有相應的垃圾收集稍後命中。

與往常一樣,您應該在實際程式碼的上下文中評估操作的性能成本。我不認為在大多數現代 .NET 應用程序中裝箱和拆箱的成本會很大,在這些應用程序中,泛型允許您避免它們用於集合等。

引用自:https://stackoverflow.com/questions/9555024