本文描述了盒裝布林分配的效能洞察。
原因
在 .NET 中進行布林值包定,每次 a bool 轉換成 object or 介面類型時,都會產生堆積分配。 這些分配雖然很小,但會在效能關鍵的程式碼路徑中迅速累積,造成不必要的垃圾回收壓力,尤其當相同的布林值被反覆打框時。
效能深入解析描述
當布林值被框住時,執行時會在堆積中分配一個新的物件來包裝該值型別。 由於只有兩個可能的布林值(true 和 false),反覆對這些值進行框化是浪費的。 與其允許隱式盒裝,不如將被封箱的實例快取並重複使用,這樣更有效率。 你可以為盒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;
}
}
其他資源
欲了解更多避免拳擊分配及其他性能最佳實務的資訊,請參閱以下資源:
遵循這些指引,您可以確保應用程式效能優化,避免不必要的裝盒開銷。