Güvenilirlik kuralları
Güvenilirlik kuralları, doğru bellek ve iş parçacığı kullanımı gibi kitaplık ve uygulama güvenilirliğini destekler. Güvenilirlik kuralları şunlardır:
Kural | Açıklama |
---|---|
CA2000: Kapsamı kaybetmeden önce verileri atın | Bir nesnenin sonlandırıcısının çalışmasını engelleyecek olağanüstü bir durum gerçekleşebileceği için, nesne ona olan tüm başvurular kapsam dışına çıkmadan açıkça atılmalıdır. |
CA2002: Zayıf kimliği olan nesneleri kilitlemeyin | Bir nesneye uygulama etki alanları arasından erişilebiliyorsa o nesnenin zayıf bir kimliğe sahip olduğu söylenir. Zayıf kimliğe sahip bir nesne üzerinde kilit almayı deneyen iş parçacığı aynı nesne üzerinde bir kilide sahip olan farklı uygulama etki alanı içindeki ikinci iş parçacığı tarafından engellenebilir. |
CA2007: Doğrudan görev beklemeyin | Zaman uyumsuz bir yöntem doğrudan bir Task bekler. |
CA2008: TaskScheduler geçirmeden görev oluşturmayın | Görev oluşturma veya devam etme işlemi, parametre belirtmeyen TaskScheduler bir yöntem aşırı yüklemesi kullanır. |
CA2009: ImmutableCollection değerinde ToImmutableCollection çağrısı yapma | ToImmutable yöntemi, ad alanından System.Collections.Immutable sabit bir koleksiyonda gereksiz yere çağrıldı. |
CA2011: Ayarlayıcı içinde özellik atama | Bir özelliğe yanlışlıkla kendi kümesi erişimcisinde bir değer atandı. |
CA2012: ValueTasks'i doğru kullanma | Üye çağrılarından döndürülen ValueTask'ler doğrudan beklenmelidir. Bir ValueTask'i birden çok kez kullanma veya tamamlanmadan önce sonucuna doğrudan erişme girişimi bir özel durum veya bozulmaya neden olabilir. Böyle bir ValueTask'in yoksayılması büyük olasılıkla işlevsel bir hatanın göstergesidir ve performansı düşürebilir. |
CA2013: ReferenceEquals'i değer türleriyle kullanmayın | kullanarak System.Object.ReferenceEqualsdeğerleri karşılaştırırken, objA ve objB değer türleriyse, yöntemine ReferenceEquals geçirilmeden önce kutulanırlar. Bu, hem objA hem de objB bir değer türünün aynı örneğini temsil etmese bile yöntemin ReferenceEquals yine de false döndürdüğü anlamına gelir. |
CA2014: Döngülerde stackalloc kullanmayın. | Stackalloc tarafından ayrılan yığın alanı yalnızca geçerli yöntemin çağrısının sonunda serbest bırakılır. Döngüde kullanmak, ilişkisiz yığın büyümesine ve nihai yığın taşma koşullarına neden olabilir. |
CA2015: MemoryManager<T'den türetilen türler için sonlandırıcı tanımlama> | türetilen MemoryManager<T> bir türe sonlandırıcı eklemek, bellek tarafından Span<T>kullanılmaya devam ederken boşaltılmaya izin verebilir. |
CA2016: CancellationToken parametresini bir tane alan yöntemlere iletin | İşlem iptal bildirimlerinin CancellationToken düzgün yayılmasını sağlamak için parametresini bir tane alan yöntemlere iletin veya belirteci kasıtlı olarak yaymadığını belirtmek için açıkça geçirin CancellationToken.None . |
CA2017: Parametre sayısı uyuşmazlığı | Günlük iletisi şablonunda sağlanan parametre sayısı, adlandırılmış yer tutucu sayısıyla eşleşmiyor. |
CA2018: için count Buffer.BlockCopy bağımsız değişken, kopyalanacak bayt sayısını belirtmelidir |
kullanılırken Buffer.BlockCopy count bağımsız değişkeni kopyalanacak bayt sayısını belirtir. Yalnızca öğeleri tam olarak bir bayt boyutunda olan dizilerde bağımsız değişken için count kullanmalısınızArray.Length . byte , sbyte ve bool dizileri tek bayt boyutunda öğelere sahiptir. |
CA2019: ThreadStatic alanlar satır içi başlatma kullanmamalıdır |
ile ThreadStaticAttribute ek açıklama ekli alan satır içinde veya açıkça bir static (Shared Visual Basic'te) oluşturucuda başlatılır. |
CA2020: IntPtr/UIntPtr'nin yerleşik işleçlerinden kaynaklanan davranış değişikliğini önleme | .NET 7'ye eklenen bazı yerleşik işleçler, .NET 6 ve önceki sürümlerdeki kullanıcı tanımlı işleçlerden farklı davranır. Taşma sırasında işaretsiz bağlam oluşturan bazı işleçler, denetlenen bağlam içinde sarmalanmadıkça artık oluşturmaz. Daha önce denetlenen bağlamı oluşturmamış olan bazı işleçler artık işaretlenmemiş bağlam içinde sarmalanmadığı sürece oluşturur. |
CA2021: Uyumsuz türlerle Enumerable.Cast<T> veya Enumerable.OfType<T> çağrılmayın | çağrısı Enumerable.Cast<TResult>(IEnumerable) veya Enumerable.OfType<TResult>(IEnumerable) giriş koleksiyonunun türüyle uyumlu olmayan bir tür parametresi belirtir. |
GitHub'da bizimle işbirliği yapın
Bu içeriğin kaynağı GitHub'da bulunabilir; burada ayrıca sorunları ve çekme isteklerini oluşturup gözden geçirebilirsiniz. Daha fazla bilgi için katkıda bulunan kılavuzumuzu inceleyin.