Teljesítményszabályok

A teljesítményszabályok támogatják a nagy teljesítményű kódtárakat és alkalmazásokat.

A szakasz tartalma

Szabály Leírás
CA1802: Szükség esetén literálok használata A mezők deklarálva statikusak és írásvédettek (a Visual Basicben megosztottak és olvashatók), és olyan értékkel inicializálva, amely fordításkor kiszámítható. Mivel a célmezőhöz rendelt érték fordításkor megbízható, módosítsa a deklarációt const (Const in Visual Basic) mezőre, hogy az érték fordításkor legyen kiszámítva a futási idő helyett.
CA1805: Ne inicializálja feleslegesen A .NET-futtatókörnyezet a konstruktor futtatása előtt inicializálja a referenciatípusok összes mezőjét az alapértelmezett értékükre. A legtöbb esetben egy mező explicit inicializálása az alapértelmezett értékre redundáns, ami növeli a karbantartási költségeket, és csökkentheti a teljesítményt (például nagyobb szerelvényméret esetén).
CA1806: Ne hagyja figyelmen kívül a metódus eredményeit A rendszer létrehoz egy új objektumot, de soha nem használ, vagy meghív egy új sztringet létrehozó és visszaadó metódust, és soha nem használja az új sztringet, vagy a komponensobjektum-modell (COM) vagy a P/Invoke metódus soha nem használt HRESULT vagy hibakódot ad vissza.
CA1810: Referenciatípus statikus mezőinek inicializálása beágyazottan Amikor egy típus explicit statikus konstruktort deklarál, a just-in-time (JIT) fordító egy ellenőrzést ad hozzá a típus minden egyes statikus metódusához és példánykonstruktorához, hogy meggyőződjön arról, hogy a statikus konstruktort korábban meghívták. A statikus konstruktor-ellenőrzések csökkenthetik a teljesítményt.
CA1812: A nem telepített belső osztályok elkerülése A szerelvényszintű példányokat nem kód hozza létre a szerelvényben.
CA1813: A nem hozzárendelt attribútumok elkerülése A .NET metódusokat biztosít az egyéni attribútumok lekéréséhez. Ezek a metódusok alapértelmezés szerint az attribútumöröklési hierarchiában keresnek. Az attribútum zárolása megszünteti a keresést az öröklési hierarchián keresztül, és javíthatja a teljesítményt.
CA1814: A többdimenziós tömbök előnyben részesítésében A szaggatott tömb olyan tömb, amelynek elemei tömbök. Az elemeket alkotó tömbök különböző méretűek lehetnek, ami egyes adathalmazok számára kevesebb felesleges helyet eredményezhet.
CA1815: Az értéktípusok felülbírálása egyenlő, az operátor pedig egyenlő Értéktípusok esetén az Egyenlőség öröklött implementációja a Önkifejezés ion könyvtárat használja, és összehasonlítja az összes mező tartalmát. Önkifejezés számítás költséges, és az egyenlőség minden mezőjének összehasonlítása szükségtelen lehet. Ha arra számít, hogy a felhasználók összehasonlítják vagy rendezik a példányokat, vagy kivonattáblakulcsként használják a példányokat, az értéktípusnak egyenlőségeket kell implementálnia.
CA1819: A tulajdonságok nem adnak vissza tömböket A tulajdonságok által visszaadott tömbök írásvédettek, még akkor sem, ha a tulajdonság írásvédett. A tömb illetéktelen hozzáférésének megőrzéséhez a tulajdonságnak vissza kell adnia a tömb egy példányát. A felhasználók általában nem fogják megérteni az ilyen tulajdonság meghívásának kedvezőtlen teljesítménybeli következményeit.
CA1820: Üres sztringek tesztelése karakterlánchossz használatával A sztringek összehasonlítása a String.Length tulajdonság vagy a String.IsNullOrEmpty metódus használatával jelentősen gyorsabb, mint az Egyenlők használata.
CA1821: Üres véglegesítők eltávolítása Amikor csak lehetséges, kerülje a véglegesítőket az objektum élettartamának nyomon követésével járó többletterhelés miatt. Az üres döntősök többletterhelést okoznak előny nélkül.
CA1822: Tagok megjelölése statikusként Azok a tagok, amelyek nem férnek hozzá a példányadatokhoz vagy a híváspéldány-metódusokhoz, statikusként (a Visual Basicben megosztva) jelölhetők meg. Miután statikusként jelölte meg a metódusokat, a fordító nemvirtual hívási webhelyeket bocsát ki ezeknek a tagoknak. Ez mérhető teljesítménynövekedést biztosíthat a teljesítményérzékeny kódhoz.
CA1823: A nem használt privát mezők elkerülése A rendszer olyan privát mezőket észlelt, amelyek nem jelennek meg a szerelvényben.
CA1824: Szerelvények megjelölése a NeutralResourcesLanguageAttribute használatával A NeutralResourcesLanguage attribútum tájékoztatja a Resource Managert arról a nyelvről, amely egy szerelvény semleges kultúrájának erőforrásainak megjelenítésére szolgál. Ez javítja az első betölthető erőforrás keresési teljesítményét, és csökkentheti a munkakészletet.
CA1825: A nulla hosszúságú tömbfoglalások elkerülése A nulla hosszúságú tömb inicializálása szükségtelen memóriafoglaláshoz vezet. Ehelyett használja a statikusan lefoglalt üres tömbpéldányt a hívással Array.Empty. A memóriafoglalás a metódus összes meghívása között meg van osztva.
CA1826: Tulajdonság használata a Linq Enumerable metódus helyett Enumerable A LINQ metódust olyan típuson használták, amely egy egyenértékű, hatékonyabb tulajdonságot támogat.
CA1827: Ne használja a Count/LongCount függvényt, ha bármelyik használható Count vagy LongCount olyan módszert használtak, ahol Any a módszer hatékonyabb lenne.
CA1828: Ne használja a CountAsync/LongCountAsync parancsot, ha az AnyAsync használható CountAsync vagy LongCountAsync olyan módszert használtak, ahol AnyAsync a módszer hatékonyabb lenne.
CA1829: Az Enumerable.Count metódus helyett használja a Length/Count tulajdonságot Count A LINQ metódust egy egyenértékű, hatékonyabb Length vagy Count tulajdonságot támogató típuson használták.
CA1830: Előnyben részesítse az erősen gépelt Hozzáfűzés és Beszúrás metódus túlterhelését a StringBuilderen Append és Insert túlterheltségeket biztosít a System.Stringen kívül több típushoz is. Ha lehetséges, a ToString() és a sztringalapú túlterhelés helyett inkább az erősen gépelt túlterheléseket részesítse előnyben.
CA1831: Ha szükséges, tartományalapú indexelők helyett AsSpan használata sztringekhez Ha tartományindexelőt használ egy sztringen, és implicit módon egy ReadOnlySpan<karaktertípushoz> rendeli hozzá az értéket, a metódust fogja használni Slicea rendszerSubstring, amely a sztring kért részének másolatát állítja elő.
CA1832: Tartományalapú indexelők helyett AsSpan vagy AsMemory használata a tömb ReadOnlySpan vagy ReadOnlyMemory részének lekéréséhez Ha tartományindexelőt használ egy tömbön, és implicit módon hozzárendeli az értéket egy ReadOnlySpan<T> vagy ReadOnlyMemory<T> egy típushoz, a rendszer a metódust GetSubArraySlicefogja használni, amely a tömb kért részének másolatát állítja elő.
CA1833: Tartományalapú indexelők helyett AsSpan vagy AsMemory használata tömb span vagy memória részének lekéréséhez Ha tartományindexelőt használ egy tömbön, és implicit módon hozzárendeli az értéket egy Span<T> vagy Memory<T> egy típushoz, a rendszer a metódust GetSubArraySlicefogja használni, amely a tömb kért részének másolatát állítja elő.
CA1834: StringBuilder.Append(char) használata egy karakteres sztringekhez StringBuilder túlterhelése Append van, amely az argumentumát veszi figyelembe char . A teljesítmény javítása érdekében inkább hívja meg a char túlterhelést.
CA1835: A "ReadAsync" és a "WriteAsync" memóriaalapú túlterheléseinek előnyben részesítése A "Stream" egy "ReadAsync" túlterheléssel rendelkezik, amely első argumentumként egy "Memória<bájtot>" vesz fel, és egy "WriteAsync" túlterhelést, amely első argumentumként egy "ReadOnlyMemory<Byte>"-t vesz fel. Inkább hívja meg a memóriaalapú túlterheléseket, amelyek hatékonyabbak.
CA1836: Előnyben részesítés IsEmpty , Count ha elérhető Előnyben részesítse IsEmpty a hatékonyabb tulajdonságot, LengthCount<TSource>(IEnumerable<TSource>) vagy CountLongCount<TSource>(IEnumerable<TSource>) állapítsa meg, hogy az objektum tartalmaz-e elemeket.
CA1837: Használat Environment.ProcessId helyett Process.GetCurrentProcess().Id Environment.ProcessId egyszerűbb és gyorsabb, mint Process.GetCurrentProcess().Ida .
CA1838: A P/Invokes paramétereinek elkerülése StringBuilder A StringBuilder rendezés mindig létrehoz egy natív pufferpéldányt, ami több lefoglalást eredményez egy rendezési művelethez.
CA1839: A Environment.ProcessPath használata a Process.GetCurrentProcess() helyett. MainModule.FileName Environment.ProcessPath egyszerűbb és gyorsabb, mint Process.GetCurrentProcess().MainModule.FileNamea .
CA1840: A Environment.CurrentManagedThreadId használata Thread.CurrentThread.ManagedThreadId helyett Environment.CurrentManagedThreadId kompaktabb és hatékonyabb, mint Thread.CurrentThread.ManagedThreadIda .
CA1841: A szótár használata metódusokat tartalmaz A hívás Contains vagy a ValuesKeys gyűjtemény gyakran drágább lehet, mint a hívás ContainsKey vagy ContainsValue a szótár.
CA1842: Ne használja az "WhenAll" műveletet egyetlen tevékenységgel Ha egyetlen tevékenységgel használ, WhenAll teljesítménycsökkenést okozhat. Várjon vagy adja vissza a feladatot.
CA1843: Ne használja a "WaitAll" műveletet egyetlen tevékenységgel Ha egyetlen tevékenységgel használ, WaitAll teljesítménycsökkenést okozhat. Várjon vagy adja vissza a feladatot.
CA1844: Az aszinkron metódusok memóriaalapú felülbírálásának biztosítása a Stream alosztályozása során A teljesítmény javítása érdekében felülbírálja a memóriaalapú aszinkron metódusokat a Stream alosztályozása során. Ezután implementálja a tömbalapú metódusokat a memóriaalapú metódusok tekintetében.
CA1845: Span-alapú sztring használata. Összefűzés" Hatékonyabb az összefűzési operátor használata AsSpan és string.Concathelyett Substring .
CA1846: Előnyben részesítés AsSpanSubstring AsSpan hatékonyabb, mint Substringa . Substring O(n) sztringmásolást hajt végre, miközben AsSpan nem, és állandó költséggel rendelkezik. AsSpan sem végez halomfoglalást.
CA1847: Karakterkonstans használata egyetlen karakterkereséshez Használja string.Contains(char) ahelyett string.Contains(string) , hogy egyetlen karaktert keresnél.
CA1848: A LoggerMessage-meghatalmazottak használata A jobb teljesítmény érdekében használja a LoggerMessage meghatalmazottakat.
CA1849: Aszinkron metódusok meghívása aszinkron metódusokban A már aszinkron metódusokban a más metódusokra irányuló hívásokat aszinkron verziójukra kell meghívni, ahol léteznek.
CA1850: A statikus HashData metódus előnyben részesítve ComputeHash Hatékonyabb a statikus HashData metódus használata egy meghívandó ComputeHashpéldány létrehozása és kezelése soránHashAlgorithm.
CA1851: A gyűjtemény lehetséges több enumerálása IEnumerable A gyűjtemény lehetséges több enumerációja IEnumerable . Érdemes lehet olyan implementációt használni, amely elkerüli a több enumerálást.
CA1852: Belső típusok lezárása Az a típus, amely nem érhető el a szerelvényen kívül, és nem tartalmaz altípusokat a szerelvényen belül, nincs lezárva.
CA1853: A Dictionary.ContainsKey(key)" szükségtelen hívása Nem kell őrködni Dictionary.Remove(key) vele Dictionary.ContainsKey(key). Dictionary<TKey,TValue>.Remove(TKey) már ellenőrzi, hogy a kulcs létezik-e, és nem dobja-e, ha nem létezik.
CA1854: Az "IDictionary.TryGetValue(TKey, out TValue)" metódus használata A "TryGetValue"-t előnyben részesítse a szótár-indexelő hozzáféréssel szemben, amelyet egy "ContainsKey" ellenőrzés véd. Az "ContainsKey" és az indexelő is megkeresi a kulcsot, így a "TryGetValue" használata elkerüli a további kereséseket.
CA1855: A Span<T> használata. Clear() helyett Span<T>. Kitöltés() Hatékonyabb a hívás Span<T>.Clear() , mint meghívni Span<T>.Fill(T) a span elemeinek alapértelmezett értékkel való kitöltését.
CA1856: A ConstantExpected attribútum helytelen használata Az ConstantExpectedAttribute attribútum nincs megfelelően alkalmazva egy paraméterre.
CA1857: A paraméter állandót vár az optimális teljesítményhez Érvénytelen argumentumot ad át a rendszer egy jegyzettel ellátott paraméternek ConstantExpectedAttribute.
CA1858: A StartsWith használata IndexOf helyett Hatékonyabb a hívás String.StartsWith , mint a hívás String.IndexOf annak ellenőrzéséhez, hogy egy sztring egy adott előtaggal kezdődik-e.
CA1859: Ha lehetséges, használjon konkrét típusokat a jobb teljesítmény érdekében A kód felülettípusokat vagy absztrakt típusokat használ, ami szükségtelen felületi hívásokhoz vagy virtuális hívásokhoz vezet.
CA1860: Kerülje az "Enumerable.Any()" bővítménymetódus használatát Hatékonyabb és egyértelműbb a használata Length, Countvagy IsEmpty (ha lehetséges), mint annak meghatározására, Enumerable.Any hogy egy gyűjteménytípus rendelkezik-e elemekkel.
CA1861: Az állandó tömbök argumentumként való elkerülése Az argumentumként átadott állandó tömbök nem lesznek újra felhasználhatók, ami teljesítményterhelést jelent. A teljesítmény javítása érdekében érdemes lehet "statikus írásvédett" mezőkre kinyerni őket.
CA1862: A "StringComparison" metódus túlterhelésének használata a kis- és nagybetűk megkülönböztetésére vonatkozó sztringek összehasonlításához Kódhívások ToLower() vagy kis- és ToUpper() nagybetűk közötti érzéketlen sztring-összehasonlítás végrehajtásakor a rendszer szükségtelen lefoglalást hajt végre.
CA1863: A "CompositeFormat" használata A formázási költség csökkentése érdekében gyorsítótárazza és használja a példányt CompositeFormat argumentumként String.FormatStringBuilder.AppendFormatvagy .
CA1864: Az "IDictionary.TryAdd(TKey, TValue)" metódus használata Mindkettőt Dictionary<TKey,TValue>.ContainsKey(TKey) , és Dictionary<TKey,TValue>.Add végezze el a redundáns kereséseket. Hatékonyabb a hívás Dictionary<TKey,TValue>.TryAdd, amely bool azt jelzi, hogy az érték hozzáadva lett-e, vagy sem. TryAdd nem írja felül a kulcs értékét, ha a kulcs már létezik.
CA1865-CA1867: Karakter túlterhelés használata A karakter túlterhelése jobban teljesít túlterhelést egy sztringnél egyetlen karakterrel.
CA1868: A "Contains" szükségtelen hívása a készletekhez Mindkettőt ISet<T>.Add(T) , és ICollection<T>.Remove(T) végezzen kereséseket, ami feleslegessé teszi a hívásokat ICollection<T>.Contains(T) előre. Hatékonyabb a hívás vagy Remove(T) a közvetlen hívásAdd(T), amely logikai értéket ad vissza, amely jelzi, hogy az elem hozzáadva vagy eltávolítva lett-e.
CA1869: A JsonSerializerOptions példányainak gyorsítótárazása és újrafelhasználása A szerializáláshoz vagy deszerializáláshoz használt helyi példány JsonSerializerOptions jelentősen csökkentheti az alkalmazás teljesítményét, ha a kód többször fut, mivel a System.Text.Json belsőleg gyorsítótárazza a szerializációval kapcsolatos metaadatokat a megadott példányba.
CA1870: Gyorsítótárazott "SearchValues" példány használata A gyorsítótárazott SearchValues<T> példányok használata hatékonyabb, mint az értékek közvetlenül az IndexOfAny vagy az ContainsAny értékének átadása.
CA1871: Ne adjon át null értékű szerkezetet az "ArgumentNullException.ThrowIfNull" értéknek Az 'ArgumentNullException.ThrowIfNull' egy "objektumot" fogad el, ezért egy null értékű szerkezet átadása miatt az érték be van jelölve.
CA1872: A "Convert.ToHexString" és a "Convert.ToHexStringLower" helyett a "BitConverter.ToString" alapú hívásláncok Bájtok hexadecimális sztringre való kódolása vagy Convert.ToHexStringLower kódolásaConvert.ToHexString. Ezek a módszerek hatékonyabbak és kiosztásbarátabbak, mint BitConverter.ToStringString.Replace a kötőjelek és String.ToLowera .