Aracılığıyla paylaş


Performans kuralları

Performans kuralları yüksek performanslı kitaplıkları ve uygulamaları destekler.

Bu bölümde

Kural Açıklama
CA1802: Uygun Yerlerde Değişmez Değerler Kullanın Alan statik ve salt okunur olarak bildirilir (Visual Basic'te Paylaşılan ve Salt Okunur) ve derleme zamanında hesaplamalı bir değerle başlatılır. Hedeflenen alana atanan değer derleme zamanında hesaplanabilir olduğundan, değerin çalışma zamanı yerine derleme zamanında hesaplanabilmesi için bildirimi bir const (Visual Basic'te Const) alanına değiştirin.
CA1805: Gereksiz yere başlatmayın .NET çalışma zamanı, oluşturucuyu çalıştırmadan önce başvuru türlerinin tüm alanlarını varsayılan değerlerine başlatır. Çoğu durumda, bir alanın varsayılan değerine açıkça başlatılması yedekli olur ve bu da bakım maliyetlerine ek olarak performansı düşürebilir (örneğin, daha yüksek derleme boyutuyla).
CA1806: Yöntem sonuçlarını yoksaymayın Yeni bir nesne oluşturulur ancak hiçbir zaman kullanılmaz ya da yeni dize oluşturup döndüren bir yöntem çağrılır ve yeni dize hiçbir zaman kullanılmaz ya da Bileşen Nesne Modeli (COM) veya P/Invoke yöntemi hresult veya hiç kullanılmayan bir hata kodu döndürür.
CA1810: Başvuru türü statik alanları satır içi başlatın Bir tür açık statik yapıcı bildirdiğinde, JIT derleyici her bir statik yöntemi kontrol ekler ve türün yapıcı örneği statik yapıcının daha önceden çağrıldığından emin olur. Statik oluşturucu denetimleri performansı düşürebilir.
CA1812: Örneklendirilmemiş iç sınıflardan kaçının Bir derleme düzeyi türünün örneği, derleme içindeki kod tarafından oluşturulmaz.
CA1813: Korumasız özniteliklerden kaçının .NET, özel öznitelikleri almak için yöntemler sağlar. Varsayılan olarak, bu yöntemleri öznitelik devralma hiyerarşisinde arar. Öznitelik mühürleme kalıtım hiyerarşisi aracılığıyla aramayı ortadan kaldırır ve performansı artırabilir.
CA1814: Basit dizileri çok boyutlu dizilere tercih edin Basit bir dizi, öğeleri dizi olan bir dizidir. Öğeleri oluşturan diziler farklı boyutlarda olabilir ve bu da bazı veri kümeleri için daha az boş alan kaybına neden olabilir.
CA1815: Değer türlerinde eşittir ve işleç eşitliklerinin üzerine yazın Değer türleri için, Equals'ın devralınmış uygulaması Reflection kitaplığını kullanır ve türdeki tüm alanların içeriğini karşılaştırır. Yansıma hesaplama açısından pahalıdır ve her alan için eşitlik karşılaştırma gereksiz olabilir. Kullanıcıları karşılaştırmak veya örneklerini sıralamak ya da tablo anahtarlarını karma olarak kullanmayı bekliyorsanız, değer türünüz Equals'ı uygulamalıdır.
CA1819: Özellikler diziler döndürmemelidir Özellik salt okunur olsa bile, özellikler tarafından döndürülen diziler yazma korumalı değildir. Dizi değiştirilmeye kanıt tutulacak özellik dizisinin bir kopyasını döndürmelidir. Tipik olarak, kullanıcılar bu tür bir özellik aramanın performans üzerindeki olumsuz etkilerini anlamayacaktır.
CA1820: Dize uzunluğunu kullanarak boş dizeler için sınayın String.Length özelliği veya String.IsNullOrEmpty yöntemi, Equals kullanılmasından önemli ölçüde daha hızlıdır.
CA1821: Boş sonlandırıcıları kaldırın Güncelleştirirken, nesne kullanım süresini izleme söz konusu olduğunda ek performans yükü nedeniyle sonlandırıcılardan kaçının. Boş bir sonlandırıcı herhangi bir avantaj olmadan ek yüke neden olur.
CA1822: Üyeleri statik olarak işaretleyin Örnek verilerine erişmeyen veya örnek yöntemlerini çağırmayan üyeler statik olarak işaretlenebilir (Visual Basic'te paylaşılan). Yöntemleri statik olarak işaretledikten sonra, derleyici sanal olmayan arama sitelerini bu üyelere yayar. Bu, ölçülebilir kazanç performansını performans duyarlı kodunuz için verebilir.
CA1823: Kullanılmayan özel alanlardan kaçının Derlemede erişimi görülmeyen özel alanlar algılandı.
CA1824: Derlemeleri NeutralResourcesLanguageAttribute ile işaretleme NeutralResourcesLanguage özniteliği, Resource Manager'a bir derleme için nötr kültürün kaynaklarını görüntülemek için kullanılan dili bildirir. Bu ilk yüklediğiniz kaynak için arama performansını artırır ve çalışma kümenizi azaltabilir.
CA1825: Sıfır uzunluklu dizi ayırmalarından kaçının Sıfır uzunluklu bir dizinin başlatılması gereksiz bellek ayırmaya neden olur. Bunun yerine çağırarak Array.Emptystatik olarak ayrılmış boş dizi örneğini kullanın. Bellek ayırma, bu yöntemin tüm çağrılarında paylaşılır.
CA1826: Linq Enumerable yöntemi yerine özelliği kullanın Enumerable LINQ yöntemi, eşdeğer, daha verimli bir özelliği destekleyen bir tür üzerinde kullanıldı.
CA1827: Herhangi biri kullanılabildiğinde Count/LongCount kullanmayın Count veya LongCount yöntemin daha verimli olacağı bir yöntem Any kullanılmıştır.
CA1828: AnyAsync kullanılabildiğinde CountAsync/LongCountAsync kullanmayın CountAsync veya LongCountAsync yöntemin daha verimli olacağı bir yöntem AnyAsync kullanılmıştır.
CA1829: Enumerable.Count yöntemi yerine Length/Count özelliğini kullanın Count LINQ yöntemi eşdeğer, daha verimli Length veya Count özelliği destekleyen bir tür üzerinde kullanılmıştır.
CA1830: StringBuilder'da kesin türdeki Ekleme ve Ekleme yöntemi aşırı yüklemelerini tercih edin Append ve Insert System.String dışındaki birden çok tür için aşırı yüklemeler sağlar. Mümkün olduğunda, ToString() ve dize tabanlı aşırı yükleme yerine kesin türdeki aşırı yüklemeleri tercih edin.
CA1831: Uygun olduğunda dize için Aralık tabanlı dizin oluşturucular yerine AsSpan kullanın Bir dizede aralık dizin oluşturucu kullanırken ve değeri örtük olarak ReadOnlySpan<karakter> türüne atarken, dizenin istenen bölümünün bir kopyasını oluşturan yerine yöntemi Substring kullanılır Slice.
CA1832: Bir dizinin ReadOnlySpan veya ReadOnlyMemory bölümünü almak için Aralık tabanlı dizin oluşturucular yerine AsSpan veya AsMemory kullanın Bir dizide aralık dizin oluşturucu kullanırken ve değeri bir ReadOnlySpan<T> veya ReadOnlyMemory<T> türüne örtük olarak atarken, dizinin istenen bölümünün bir kopyasını oluşturan yerine Sliceyöntemi GetSubArray kullanılır.
CA1833: Bir dizinin Span veya Memory bölümünü almak için Aralık tabanlı dizin oluşturucular yerine AsSpan veya AsMemory kullanın Bir dizide aralık dizin oluşturucu kullanırken ve değeri bir Span<T> veya Memory<T> türüne örtük olarak atarken, dizinin istenen bölümünün bir kopyasını oluşturan yerine Sliceyöntemi GetSubArray kullanılır.
CA1834: Tek karakterli dizeler için StringBuilder.Append(char) kullanın StringBuilder bağımsız değişkeni olarak bir alan aşırı Appendchar yüklemesine sahiptir. Performansı geliştirmek için aşırı yüklemeyi çağırmayı char tercih edin.
CA1835: 'ReadAsync' ve 'WriteAsync' için 'Bellek' tabanlı aşırı yüklemeleri tercih edin 'Stream', ilk bağımsız değişken olarak 'Memory<Byte>' alan bir 'ReadAsync' aşırı yüklemesine ve ilk bağımsız değişken olarak 'ReadOnlyMemory<Byte>' alan bir 'WriteAsync' aşırı yüklemesine sahiptir. Daha verimli olan bellek tabanlı aşırı yüklemeleri çağırmayı tercih edin.
CA1836: Kullanılabilir olduğunda tercih et IsEmptyCount Nesnenin herhangi bir öğe içerip içermediğini belirlemek için , Count<TSource>(IEnumerable<TSource>)LengthLongCount<TSource>(IEnumerable<TSource>) veya değerinden Countdaha verimli olan özelliği tercih edin.IsEmpty
CA1837: Yerine kullanın Environment.ProcessIdProcess.GetCurrentProcess().Id Environment.ProcessId , değerinden Process.GetCurrentProcess().Iddaha basit ve daha hızlıdır.
CA1838: P/Invokes parametrelerinden kaçının StringBuilder öğesinin StringBuilder düzeni her zaman yerel bir arabellek kopyası oluşturur ve bu da tek bir marshalling işlemi için birden çok ayırmaya neden olur.
CA1839: Process.GetCurrentProcess() yerine Environment.ProcessPath kullanın. MainModule.FileName Environment.ProcessPath , değerinden Process.GetCurrentProcess().MainModule.FileNamedaha basit ve daha hızlıdır.
CA1840: Thread.CurrentThread.ManagedThreadId yerine Environment.CurrentManagedThreadId kullanın Environment.CurrentManagedThreadId değerinden Thread.CurrentThread.ManagedThreadIddaha kompakt ve verimlidir.
CA1841: Sözlük İçeren yöntemleri tercih edin veya koleksiyonunda çağırmak Contains genellikle sözlüğü çağırmaktan Keys veya ContainsValue sözlüğün kendisinden daha ContainsKey pahalı olabilir.Values
CA1842: 'WhenAll'ı tek bir görevle kullanmayın Tek bir görevle kullanmak WhenAll performans kaybına neden olabilir. Bunun yerine görevi bekler veya döndürür.
CA1843: Tek bir görevle 'WaitAll' kullanmayın Tek bir görevle kullanmak WaitAll performans kaybına neden olabilir. Bunun yerine görevi bekler veya döndürür.
CA1844: 'Stream' alt sınıfına alırken zaman uyumsuz yöntemlerin bellek tabanlı geçersiz kılmalarını sağlayın Performansı geliştirmek için 'Stream' alt sınıfını oluştururken bellek tabanlı zaman uyumsuz yöntemleri geçersiz kılın. Ardından dizi tabanlı yöntemleri bellek tabanlı yöntemler açısından uygulayın.
CA1845: Span tabanlı 'string' kullanın. Concat' ve yerine ve string.Concatbirleştirme işlecini Substring kullanmak AsSpan daha verimlidir.
CA1846: Tercih et AsSpanSubstring AsSpan değerinden daha Substringverimlidir. Substring bir O(n) dize kopyası gerçekleştirir, ancak AsSpan gerçekleştirmez ve sabit bir maliyeti vardır. AsSpan ayrıca herhangi bir yığın ayırması gerçekleştirmez.
CA1847: Tek karakterli arama için karakter değişmez değeri kullanma Tek bir karakter aramak yerine String.Contains(string) kullanınString.Contains(char).
CA1848: LoggerMessage temsilcilerini kullanma Gelişmiş performans için temsilcileri kullanın LoggerMessage .
CA1849: Zaman uyumsuz yöntem içindeyken zaman uyumsuz yöntemleri çağırma Zaten zaman uyumsuz olan bir yöntemde, diğer yöntemlere yapılan çağrılar, mevcut oldukları zaman uyumsuz sürümlerine yönelik olmalıdır.
CA1850: Statik HashData yöntemi tercih edin ComputeHash Çağrılacak ComputeHashörneği oluşturmak ve yönetmek yerine statik HashData yöntemi kullanmak daha verimlidirHashAlgorithm.
CA1851: Olası birden çok koleksiyon numaralandırması IEnumerable Olası birden çok koleksiyon numaralandırması IEnumerable . Birden çok numaralandırmayı önleyen bir uygulama kullanmayı göz önünde bulundurun.
CA1852: İç türleri mühürleme Derlemesi dışında erişilmeyen ve içeren derleme içinde alt türü olmayan bir tür mühürlenmez.
CA1853: 'Dictionary.ContainsKey(key)' için gereksiz çağrı ile Dictionary.ContainsKey(key)korunmaya Dictionary.Remove(key) gerek yoktur. Dictionary<TKey,TValue>.Remove(TKey) zaten anahtarın var olup olmadığını denetler ve yoksa atamaz.
CA1854: 'IDictionary.TryGetValue(TKey, out TValue)' yöntemini tercih edin 'ContainsKey' denetimiyle korunan bir Sözlük dizin oluşturucu erişimi yerine 'TryGetValue' seçeneğini tercih edin. Hem 'ContainsKey' hem de dizin oluşturucu anahtarı arar, bu nedenle 'TryGetValue' kullanıldığında ek arama engellenir.
CA1855: Span<T> kullanın. Span<T> yerine Clear() . Fill() Çağırmak Span<T>.Clear() , span öğelerini varsayılan değerle doldurmak için çağırmaktan Span<T>.Fill(T) daha verimlidir.
CA1856: ConstantExpected özniteliğinin yanlış kullanımı ConstantExpectedAttribute Özniteliği bir parametreye doğru uygulanmadı.
CA1857: parametresi en iyi performans için bir sabit bekler ile ConstantExpectedAttributeaçıklama ekleyen bir parametreye geçersiz bir bağımsız değişken geçirilir.
CA1858: IndexOf yerine StartsWith kullanın Dizenin belirli bir ön ek ile başlayıp başlamadığını denetlemek için çağırmaktan String.IndexOf daha verimlidirString.StartsWith.
CA1859: Gelişmiş performans için mümkün olduğunda somut türler kullanın Kod, arabirim türlerini veya soyut türleri kullanarak gereksiz arabirim çağrılarına veya sanal çağrılara yol açar.
CA1860: 'Enumerable.Any()' uzantı yöntemini kullanmaktan kaçının Bir koleksiyon türünün herhangi bir öğeye sahip olup olmadığını belirlemek için çağrısı Enumerable.Any yapmak yerine , Countveya IsEmpty (mümkünse) kullanmak Lengthdaha verimli ve daha nettir.
CA1861: Bağımsız değişken olarak sabit dizilerden kaçının Bağımsız değişken olarak geçirilen sabit diziler yeniden kullanılmaz ve bu da performans ek yükü anlamına gelir. Performansı artırmak için bunları 'statik salt okunur' alanlara ayıklamayı göz önünde bulundurun.
CA1862: Büyük/küçük harfe duyarlı olmayan dize karşılaştırmaları gerçekleştirmek için 'StringComparison' yöntemi aşırı yüklemelerini kullanın Kod çağırdığında ToLower() veya ToUpper() büyük/küçük harfe duyarlı olmayan bir dize karşılaştırması gerçekleştirdiğinde, gereksiz bir ayırma gerçekleştirilir.
CA1863: 'CompositeFormat' kullanın Biçimlendirme maliyetini azaltmak için veya için bağımsız değişken olarak bir CompositeFormat örneği önbelleğe String.FormatStringBuilder.AppendFormatalın ve kullanın.
CA1864: 'IDictionary.TryAdd(TKey, TValue)' yöntemini tercih edin Dictionary<TKey,TValue>.Add Hem hem de Dictionary<TKey,TValue>.ContainsKey(TKey) yedekli bir arama gerçekleştirin. değerini çağırmak Dictionary<TKey,TValue>.TryAdddaha verimlidir. Bu, değerin eklenip eklenmediğini belirten bir bool değer döndürür. TryAdd anahtar zaten varsa anahtarın değerinin üzerine yazmaz.
CA1865-CA1867: Karakter aşırı yükleme kullanma Karakter aşırı yüklemesi, tek karakterli bir dize için daha iyi performans gösteren bir aşırı yüklemedir.
CA1868: Kümeler için gereksiz 'İçerir' çağrısı ICollection<T>.Remove(T) Hem hem de ISet<T>.Add(T) önceden çağrılmaya ICollection<T>.Contains(T) yedekli hale getiren bir arama gerçekleştirin. Öğenin eklenip eklenmediğini veya kaldırıldığını belirten bir Boole değeri döndüren veya Remove(T) doğrudan çağırmak Add(T) daha verimlidir.
CA1869: 'JsonSerializerOptions' örneklerini önbelleğe alma ve yeniden kullanma System.Text.Json serileştirmeyle ilgili meta verileri sağlanan örnekte dahili olarak önbelleğe aldığı için, serileştirme veya seri durumdan çıkarma için yerel bir örneğinin JsonSerializerOptions kullanılması, kodunuz birden çok kez yürütülürse uygulamanızın performansını önemli ölçüde düşürebilir.
CA1870: Önbelleğe alınmış bir 'SearchValues' örneği kullanın Önbelleğe alınmış SearchValues<T> örnek kullanmak, değerleri doğrudan 'IndexOfAny' veya 'ContainsAny' öğesine geçirmekten daha verimlidir.
CA1871: 'ArgumentNullException.ThrowIfNull' öğesine null atanabilir bir yapı geçirmeyin 'ArgumentNullException.ThrowIfNull' bir 'object' kabul eder, bu nedenle null atanabilir bir yapı geçirmek değerin kutulanmasına neden olabilir.
CA1872: 'BitConverter.ToString' tabanlı çağrı zincirleri yerine 'Convert.ToHexString' ve 'Convert.ToHexStringLower' tercih edin Baytları onaltılık dize gösterimine kodlarken veya Convert.ToHexStringLower kullanınConvert.ToHexString. Bu yöntemler, ve tirelerini değiştirmek için ile birlikte String.Replace kullanmaktan BitConverter.ToString daha verimli ve String.ToLowerayırma dostudur.