Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A teljesítményszabályok támogatják a nagy teljesítményű kódtárakat és alkalmazásokat.
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ő | Az értéktípusok esetében az Egyenlőség öröklött implementációja a Tükröződés kódtárat használja, és összehasonlítja az összes mező tartalmát. A tükröződés számításilag 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 Substringa rendszerSlice, 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, Count Length vagy Count<TSource>(IEnumerable<TSource>)LongCount<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().Id a . |
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.FileName a . |
CA1840: A Environment.CurrentManagedThreadId használata Thread.CurrentThread.ManagedThreadId helyett |
Environment.CurrentManagedThreadId kompaktabb és hatékonyabb, mint Thread.CurrentThread.ManagedThreadId a . |
CA1841: A szótár használata metódusokat tartalmaz | A hívás Contains vagy a Keys Values 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.Concat helyett Substring . |
CA1846: Előnyben részesítés AsSpan Substring |
AsSpan hatékonyabb, mint Substring a .
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ó HashAlgorithm példány létrehozása és kezelése soránComputeHash . |
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 , Count vagy 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.Format StringBuilder.AppendFormat vagy . |
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 Add(T) a közvetlen hívásRemove(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.ToHexString kódolásaConvert.ToHexStringLower. Ezek a módszerek hatékonyabbak és kiosztásbarátabbak, mint BitConverter.ToStringString.Replace a kötőjelek és String.ToLowera . |
.NET -visszajelzés
A(z) .NET egy nyílt forráskód projekt. Visszajelzés adásához válasszon egy hivatkozást: