Pravidla spolehlivosti
Pravidla spolehlivosti podporují knihovnu a spolehlivost aplikací, například správné využití paměti a vlákna. Mezi pravidla spolehlivosti patří:
Pravidlo | Popis |
---|---|
CA2000: Uvolňujte objekty před ztrátou oboru | Protože může dojít k mimořádné události, která zabrání spuštění destruktoru objektu, měl by být objekt explicitně uvolněn předtím, než se všechny odkazy na něj dostanou mimo rozsah. |
CA2002: Nepoužívejte zámky na objekty se slabou identitou | Objekt má slabou identitu, pokud k němu lze přímo přistupovat přes hranice aplikační domény. Vlákno, které se pokouší získat zámek na objekt se slabou identitou, může být blokováno jiným vláknem v jiné aplikační doméně, které má zámek na stejný objekt. |
CA2007: Nečekejte přímo na úkol | Asynchronní metoda čekáTask přímo. |
CA2008: Nevytvářejte úkoly bez předání taskScheduler | Operace vytvoření nebo pokračování úlohy používá přetížení metody, které neurčovalo TaskScheduler parametr. |
CA2009: Nevolejte ToImmutableCollection u hodnoty ImmutableCollection | ToImmutable metoda byla zbytečně volána v neměnné kolekci z System.Collections.Immutable oboru názvů. |
CA2011: Nepřiřazovat vlastnost v rámci jeho setter | Vlastnost byla omylem přiřazena hodnota v rámci svého vlastního přístupového objektu sady. |
CA2012: Správné použití hodnotových hodnot | HodnotaTasks vrácená z volání členů je určena k přímému očekávání. Pokusy o vícenásobné využití hodnoty ValueTask nebo přímý přístup k výsledku jednoho z nich dříve, než je známo, že je dokončen, může vést k výjimce nebo poškození. Ignorování takové hodnoty ValueTask pravděpodobně značí funkční chybu a může snížit výkon. |
CA2013: Nepoužívejte referenceEquals s typy hodnot | Při porovnávání hodnot pomocí System.Object.ReferenceEquals, pokud objA a objB jsou typy hodnot, jsou boxovány před jejich předáním metodě ReferenceEquals . To znamená, že i když objA i objB představují stejnou instanci typu hodnoty, ReferenceEquals metoda přesto vrátí false. |
CA2014: Nepoužívejte ve smyčce stackalloc. | Prostor zásobníku přidělený stackallocem se uvolní pouze na konci volání aktuální metody. Použití ve smyčce může vést k nevázaným růstem zásobníku a případným podmínkám přetečení zásobníku. |
CA2015: Nedefinujte finalizační metody pro typy odvozené z memoryManager<T> | Přidání finalizátoru do typu odvozeného z MemoryManager<T> může umožnit uvolnění paměti, zatímco je stále používána Span<T>. |
CA2016: Předání parametru CancellationToken metodám, které berou jeden | CancellationToken Předejte parametr metodám, které ho převedou, aby se zajistilo, že se oznámení o zrušení operace správně rozšíří, nebo CancellationToken.None předat explicitně, aby indikovala úmyslně nerozšíření tokenu. |
CA2017: Neshoda počtu parametrů | Počet parametrů zadaných v šabloně zprávy protokolování neodpovídá počtu pojmenovaných zástupných symbolů. |
CA2018: Argument count , který má Buffer.BlockCopy určovat počet bajtů ke zkopírování |
Při použití Buffer.BlockCopy count argument určuje počet bajtů, které se mají zkopírovat. Pro argumenty byste měli použít Array.Length count pouze pole, jejichž prvky jsou přesně jeden bajt ve velikosti. byte , sbyte a bool pole obsahují prvky, které mají velikost jednoho bajtu. |
CA2019: ThreadStatic Pole by neměla používat vložené inicializace |
Pole s poznámkami ThreadStaticAttribute je inicializováno vloženým nebo explicitně v konstruktoru static (Shared v jazyce Visual Basic). |
CA2020: Zabránění změnám chování způsobeným integrovanými operátory IntPtr/UIntPtr | Některé předdefinované operátory přidané v .NET 7 se chovají jinak než uživatelem definované operátory v .NET 6 a starších verzích. Některé operátory, které se použily k vyvolání nezaškrtnutého kontextu při přetečení, se už nevyvolají, pokud nejsou zabalené v rámci kontrolovaného kontextu. Některé operátory, které dříve nevyvolaly vrácený kontrolovaný kontext, nyní vyvolány, pokud nejsou zabaleny v nezaškrtnutém kontextu. |
CA2021: Nevolejte Enumerable.Cast<T> nebo Enumerable.OfType<T> s nekompatibilními typy | Volání Enumerable.Cast<TResult>(IEnumerable) nebo Enumerable.OfType<TResult>(IEnumerable) určuje parametr typu, který není kompatibilní s typem vstupní kolekce. |
Spolupracujte s námi na GitHubu
Zdroj tohoto obsahu najdete na GitHubu, kde můžete také vytvářet a kontrolovat problémy a žádosti o přijetí změn. Další informace najdete v našem průvodci pro přispěvatele.