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.
Ebben a szakaszban
| Szabály | Leírás |
|---|---|
| CA1802: Szükség esetén literálok használata | Egy mező statikusnak és csak olvashatónak van deklarálva (a Visual Basicben Shared és ReadOnly), és olyan értékkel van inicializálva, amely fordítási időben kiszámítható. Mivel a megcélzott mező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ási időpontban legyen kiszámítva, és ne futásidőben. |
| 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ű típus egy példányát nem a szerelvényben lévő kód hozza létre. |
| 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: Az egyenetlen tömbök előnyben részesítése a többdimenziós tömbökkel szemben | 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: Bírálja felül az Equals metódust és az egyenlőségoperátort az értéktípusokon | 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 ne adjanak vissza tömböt | A tulajdonságok által visszaadott tömbök nem írásvédettek, még akkor sem, ha a tulajdonság írásvédett. Annak érdekében, hogy a tömb módosítással szemben védett maradjon, a tulajdonságnak a tömb másolatát kell visszaadnia. 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 karakterláncok ellenőrzése a karakterlánc hossza alapján | 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, és nem hívnak meg példánymetódusokat, statikusnak jelölhetők meg (a Visual Basicben Shared). Miután a metódusokat statikussá jelöli, a fordító nem virtuális hívási helyeket hoz létre ezekhez a tagokhoz. 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, amelyekhez az assemblyben láthatóan nem férnek hozzá. |
| 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 allokált üres tömbpéldányt a(z) Array.Empty hívásával. 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: A StringBuilder esetében részesítse előnyben a szigorúan típusos Append és Insert metódustúlterheléseket | 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 karakterlánc-alapú túlterhelés helyett inkább a szigorúan típusos túlterheléseket használja. |
| CA1831: Ha szükséges, tartományalapú indexelők helyett AsSpan használata sztringekhez | Ha egy sztringen tartományindexelőt használ, és az értéket implicit módon egy ReadOnlySpan<char> típusnak adja át, akkor a(z) Substring metódus lesz használatban a(z) Slice helyett, amely a sztring kért részéről másolatot készít. |
| 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 egy tömbön tartományindexelőt használ, és az értéket implicit módon egy ReadOnlySpan<T> vagy ReadOnlyMemory<T> típushoz rendeli hozzá, akkor a rendszer a GetSubArray metódust használja a Slice helyett, amely a tömb kért részéről másolatot készít. |
| 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 egy tömbön tartományindexelést használ, és az értéket implicit módon egy Span<T> vagy Memory<T> típushoz rendeli, akkor a rendszer a(z) Slice helyett a(z) GetSubArray metódust használja, amely a tömb kért részéről másolatot készít. |
| CA1834: A StringBuilder.Append(char) használata egyetlen karakterből álló sztringekhez | A(z) StringBuilder rendelkezik egy olyan Append túlterheléssel, amelynek argumentuma egy char. A teljesítmény javítása érdekében részesítse előnyben a(z) char túlterhelés hívását. |
| 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: Ha elérhető, részesítse előnyben a(z) IsEmpty elemet a(z) Count helyett |
Részesítse előnyben a(z) IsEmpty tulajdonságot, amely hatékonyabb, mint a(z) Count, Length, Count<TSource>(IEnumerable<TSource>) vagy LongCount<TSource>(IEnumerable<TSource>), annak megállapításához, hogy az objektum tartalmaz-e bármilyen elemet. |
CA1837: A(z) Environment.ProcessId használata Process.GetCurrentProcess().Id helyett |
Environment.ProcessId egyszerűbb és gyorsabb, mint Process.GetCurrentProcess().Ida . |
CA1838: A P/Invokes paramétereinek elkerülése StringBuilder |
A(z) StringBuilder marshallingja mindig létrehozza a natív puffer egy másolatát, ami egyetlen marshalling művelet során több memóriafoglalást eredményez. |
| CA1839: Használja a(z) Environment.ProcessPath elemet a(z) Process.GetCurrentProcess().MainModule.FileName helyett |
Environment.ProcessPath egyszerűbb és gyorsabb, mint Process.GetCurrentProcess().MainModule.FileNamea . |
| CA1840: Az Environment.CurrentManagedThreadId használata a Thread.CurrentThread.ManagedThreadId helyett |
Environment.CurrentManagedThreadId kompaktabb és hatékonyabb, mint Thread.CurrentThread.ManagedThreadIda . |
| CA1841: Részesítse előnyben a Dictionary.Contains metódusokat | A(z) Keys vagy Values gyűjteményen a(z) Contains meghívása gyakran költségesebb lehet, mint a(z) ContainsKey vagy ContainsValue közvetlen meghívása magán a szótáron. |
| CA1842: Ne használja az "WhenAll" műveletet egyetlen tevékenységgel | A(z) WhenAll egyetlen feladattal történő használata 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 | A WaitAll egyetlen feladattal történő használata teljesítménycsökkenéshez vezethet. 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: A span-alapú „string.Concat” használata | Hatékonyabb a AsSpan és a string.Concat használata a Substring és az összefűzési operátor helyett. |
CA1846: A(z) AsSpan előnyben részesítése a(z) Substring helyett |
AsSpan hatékonyabb, mint Substringa .
Substring egy O(n) karakterlánc-másolást végez, míg AsSpan nem, és állandó költségű.
AsSpan sem végez halomfoglalást. |
| CA1847: Karakterkonstans használata egyetlen karakterkereséshez | Egyetlen karakter keresésekor a(z) String.Contains(string) helyett használja a(z) String.Contains(char) elemet. |
| CA1848: A LoggerMessage delegáltjainak használata | A jobb teljesítmény érdekében használja a LoggerMessage meghatalmazottakat. |
| CA1849: Aszinkron metódusok meghívása aszinkron metódusokban | Egy már eleve aszinkron metódusban más metódusok hívásainál azok aszinkron változatát kell használni, ha létezik ilyen. |
CA1850: A(z) ComputeHash helyett a statikus HashData metódus használata ajánlott |
Hatékonyabb a statikus HashData metódust használni, mint létrehozni és kezelni egy HashAlgorithm-példányt a ComputeHash meghívásához. |
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 zárolá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(z) „Dictionary.ContainsKey(key)” fölösleges hívása | Nincs szükség arra, hogy a(z) Dictionary.Remove(key) elemet a(z) Dictionary.ContainsKey(key) elemmel védje.
Dictionary<TKey,TValue>.Remove(TKey) már ellenőrzi, hogy a kulcs létezik-e, és nem dob kivételt, ha az 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>.Fill() helyett használja a Span<T>.Clear() metódust | A span elemeinek alapértelmezett értékkel való kitöltéséhez hatékonyabb a(z) Span<T>.Clear() meghívása, mint a(z) Span<T>.Fill(T) meghívása. |
| 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 | A String.StartsWith hívása hatékonyabb, mint a String.IndexOf hívása annak ellenőrzésére, hogy egy karakterlánc megadott 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 Length, Count vagy IsEmpty használata (ha lehetséges), mint a Enumerable.Any meghívása annak megállapítására, hogy egy gyűjteménytípus tartalmaz-e elemeket. |
| 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 ezeket 'static readonly' mezőkbe áthelyezni. |
| CA1862: A(z) „StringComparison” metódustúlterhelések használata a kis- és nagybetűket figyelmen kívül hagyó karakterlánc-összehasonlítások végrehajtásához | Amikor a kód a ToLower() vagy a ToUpper() hívásával kis- és nagybetűket nem megkülönböztető sztring-összehasonlítást végez, szükségtelen foglalás történik. |
| CA1863: A(z) „CompositeFormat” használata | A formázási költségek csökkentése érdekében gyorsítótárazzon és használjon egy CompositeFormat példányt a String.Format vagy a StringBuilder.AppendFormat argumentumaként. |
| CA1864: Az "IDictionary.TryAdd(TKey, TValue)" metódus használata | Mind a Dictionary<TKey,TValue>.ContainsKey(TKey), mind a Dictionary<TKey,TValue>.Add keresést hajt végre, ami redundáns. Hatékonyabb a(z) Dictionary<TKey,TValue>.TryAdd meghívása, amely egy bool értéket ad vissza, jelezve, hogy az érték hozzá lett-e adva 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 char paramétert használó túlterhelés jobb teljesítményt nyújt egyetlen karakterből álló sztring esetén. |
| CA1868: A „Contains” szükségtelen meghívása halmazok esetén | Mind a ISet<T>.Add(T), mind a ICollection<T>.Remove(T) végez keresést, ezért felesleges előzetesen meghívni a ICollection<T>.Contains(T) elemet. Hatékonyabb közvetlenül a Add(T) vagy a Remove(T) meghívása, amely logikai értékkel jelzi, hogy az elem hozzá lett-e adva vagy el lett-e távolítva. |
| 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: Használjon gyorsítótárazott „SearchValues” példányt | Egy gyorsítótárazott SearchValues<T> példány használata hatékonyabb, mint az értékek közvetlen átadása az 'IndexOfAny' vagy a 'ContainsAny' számára. |
| CA1871: Ne adjon át null értékű nullable struktúrát az ArgumentNullException.ThrowIfNull metódusnak | Az „ArgumentNullException.ThrowIfNull” egy „object” típust fogad el, ezért egy null értéket is felvevő struktúra átadásakor az érték dobozolásra kerülhet. |
| CA1872: Részesítse előnyben a(z) „Convert.ToHexString” és „Convert.ToHexStringLower” elemet a „BitConverter.ToString” alapú hívásláncokkal szemben | A bájtok hexadecimális karakterlánc-reprezentációvá kódolásakor használja a Convert.ToHexString vagy a Convert.ToHexStringLower elemet. Ezek a módszerek hatékonyabbak és allokációbarátabbak, mint a BitConverter.ToString és String.Replace kombinációjának használata a kötőjelek és a String.ToLower lecserélésére. |
| CA1873: A potenciálisan költséges naplózás elkerülése | A naplózási metódusok meghívásakor a rendszer az argumentumokat attól függetlenül kiértékeli, hogy engedélyezve van-e a naplózási szint. Ez költséges műveleteket eredményezhet még akkor is, ha a naplóüzenet nem lesz megírva. A jobb teljesítmény érdekében védd meg a drága naplózási hívásokat egy ellenőrzéssel a IsEnabled-hoz, vagy használd a LoggerMessage mintát. |
| CA1874: Használja a "Regex.IsMatch"-et |
Regex.IsMatch egyszerűbb és gyorsabb, mint Regex.Match(...).Successa . |
| CA1875: Használja a 'Regex.Count' kifejezést |
Regex.Count egyszerűbb és gyorsabb, mint Regex.Matches(...).Counta . |
| CA1877: "Path.Combine" vagy "Path.Join" túlterhelések használata | Több egymást követő Path.Combine vagy Path.Join művelet összecsukható egyetlen hívásba több útvonalszegmenst elfogadó túlterheléssel. |
| CA1878: Előnyben részesíti a ReadOnlySpan tulajdonságokat az olvasható tömbmezőkkel szemben | Egy privát statikus, csak olvasható konstans tömbmező lecserélhető egy ReadOnlySpan<T> tulajdonságra, így a C#-fordító elkerülheti egy felügyelt tömb lefoglalását. |
Dolgozzon együtt velünk a GitHubon
A tartalom forrása a GitHubon található, ahol létrehozhat és áttekinthet problémákat és lekéréses kérelmeket is. További információért tekintse meg a közreműködői útmutatónkat.