Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, kutulanmış boole ayırmaları için performans içgörüleri açıklanmaktadır.
Nedeni
.NET'teki boole değerleri kutulama, bir bool veya arabirim türüne object her dönüştürüldüğünde yığın ayırmaları oluşturur. Bu ayırmalar küçük olsa da performans açısından kritik kod yollarında hızla birikebilir ve özellikle aynı boole değerleri tekrar tekrar kutulandığında gereksiz çöp toplama baskısına neden olabilir.
Performans içgörü açıklaması
Bir boole değeri kutulandığında, çalışma zamanı değer türünü sarmak için yığında yeni bir nesne ayırır. Yalnızca iki olası boole değeri (true ve false) olduğundan, bu değerlerin tekrar tekrar kutulanması boşa harcanabilir. Örtük kutulama yapmak yerine kutulanmış örnekleri önbelleğe almak ve yeniden kullanmak daha verimlidir. Kutulanmış true ve değerler için statik salt okunur alanlar oluşturabilir ve false kutulama gerektiğinde uygun önbelleğe alınmış örneği döndürebilirsiniz.
Uyarıyı araştırma
Ayrılan kutulanmış boole nesnelerini gösteren Ayırma görünümüne gitmek için Araştır bağlantısına tıklayın. Ayırmaya çift tıklandığında, ayırmaların oluştuğu kod yolları gösterilir. Kutulanmış boole değerlerini önbelleğe alarak ve yinelenen kutulama işlemlerine izin vermek yerine önbelleğe alınmış örnekleri döndürerek bu ayırmaları azaltmayı göz önünde bulundurun.
Copilot etkinleştirildiyse Copilot'a Sor Copilot'a Sor
bakın. Düğmeyi seçtiğinizde Copilot ayırma desenlerinin ayrıntılı bir analizini sağlar ve bellek kullanımınızı iyileştirmek için kod düzeltmeleri önerir.
Aşağıda kutulanmış boole ayırma ve çözümleme örneği verilmiştir:
Ihlal:
class Example
{
public object GetResult(bool condition)
{
return condition; // Implicit boxing occurs here
}
}
Çözüm:
class Example
{
private static readonly object BoxedTrue = true;
private static readonly object BoxedFalse = false;
public object GetResult(bool condition)
{
return condition ? BoxedTrue : BoxedFalse;
}
}
Ek kaynaklar
Kutulama ayırmalarını ve diğer performans en iyi yöntemlerini önleme hakkında daha fazla bilgi için aşağıdaki kaynaklara bakın:
Kutulama ve Kutu açma (C# Programlama Kılavuzu)
CA1841: Tercih Dictionary.Contains yöntemleri (kod analizi)
Bu yönergeleri izleyerek uygulamanızın performans için iyileştirildiğinden ve gereksiz kutulama ek yükünden kaçındığından emin olabilirsiniz.