共用方式為


盒裝布林分配

本文描述了盒裝布林分配的效能洞察。

原因

在 .NET 中進行布林值包定,每次 a bool 轉換成 object or 介面類型時,都會產生堆積分配。 這些分配雖然很小,但會在效能關鍵的程式碼路徑中迅速累積,造成不必要的垃圾回收壓力,尤其當相同的布林值被反覆打框時。

效能深入解析描述

當布林值被框住時,執行時會在堆積中分配一個新的物件來包裝該值型別。 由於只有兩個可能的布林值(truefalse),反覆對這些值進行框化是浪費的。 與其允許隱式盒裝,不如將被封箱的實例快取並重複使用,這樣更有效率。 你可以為盒truefalse裝和值建立靜態的唯讀欄位,並在需要盒裝時回傳適當的快取實例。

如何調查警告

點擊 「調查 」連結,前往 配置檢視, 顯示已分配的框框布林物件。 按兩下設定會顯示發生設定的程式代碼路徑。 考慮透過快取盒裝布林值並回傳快取實例來減少這些配置,而非允許重複的盒裝操作。

如果啟用了 Copilot,你會看到「詢問副駕駛」按鈕的「詢問副駕駛截圖」按鈕。 選取按鈕,Copilot 會提供配置模式的詳細分析,並建議程式碼修正以最佳化記憶體使用量。

以下是一個盒式布林分配及其解析的範例:

違反:

class Example
{
    public object GetResult(bool condition)
    {
        return condition; // Implicit boxing occurs here
    }
}

解決方案:

class Example
{
    private static readonly object BoxedTrue = true;
    private static readonly object BoxedFalse = false;

    public object GetResult(bool condition)
    {
        return condition ? BoxedTrue : BoxedFalse;
    }
}

其他資源

欲了解更多避免拳擊分配及其他性能最佳實務的資訊,請參閱以下資源:

裝箱與開箱(C# 程式設計指南)

CA1841:偏好字典。包含方法(程式碼分析)

遵循這些指引,您可以確保應用程式效能優化,避免不必要的裝盒開銷。