Sdílet prostřednictvím


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: Odstraňte objekty před ztrátou oboru Vzhledem k tomu, že může dojít k mimořádné události, která zabrání dokončení objektu, musí být objekt explicitně odstraněn před tím, než všechny odkazy na něj budou mimo rozsah.
CA2002: Nezamkněte objekty se slabým identity Objekt má slabou identitu, když se k ní dá přímo přistupovat přes hranice domény aplikace. Vlákno, které se pokusí získat zámek objektu, který má slabou identitu, může být blokováno druhým vláknem v jiné doméně aplikace, která má zámek na stejném objektu.
CA2007: Nečekejte přímo na úkolu Asynchronní metoda očekává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é nezadá parametr TaskScheduler.
CA2009: Nevolejte ToImmutableCollection na hodnotu ImmutableCollection ToImmutable metoda byla zbytečně volána v neměnné kolekci z oboru názvů System.Collections.Immutable.
CA2011: Nepřiřazujte vlastnost v rámci Vlastnost byla omylem přiřazena hodnota v rámci vlastní nastavit přístupové.
CA2012: Správně použít hodnoty ValueTasks 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 před předáním do metody ReferenceEquals. To znamená, že i když objA i objB představují stejnou instanci typu hodnoty, metoda ReferenceEquals přesto vrátí hodnotu false.
CA2014: Nepoužívejte stackalloc ve smyčce. 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 nástroje MemoryManager<T> Přidání finalizátoru do typu odvozeného z MemoryManager<T> může umožnit uvolnění paměti, pokud je stále používána Span<T>.
CA2016: Předejte parametr CancellationToken metodám, které přebírají jednu Předejte parametr CancellationToken metodám, které ho převedou, aby se zajistilo správné šíření oznámení o zrušení operace, nebo předání CancellationToken.None explicitně, aby indikovaly ú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 countBuffer.BlockCopy by měl určovat počet bajtů, které se mají kopírovat Při použití Buffer.BlockCopyurčuje argument count počet bajtů, které se mají zkopírovat. Pro argument Array.Length byste měli použít pouze count pro pole, jejichž prvky mají přesně jeden bajt. pole byte, sbytea bool mají prvky, které mají velikost jednoho bajtu.
CA2019: pole ThreadStatic by neměla používat vložené inicializační Pole, které je opatřeno poznámkami ThreadStaticAttribute, se inicializuje vloženě 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.
CA2022: Vyhněte se neexact čtení pomocí stream.Read Volání Stream.Read může vrátit méně bajtů, než je požadováno, což vede k nespolehlivému kódu, pokud vrácená hodnota není zaškrtnutá.
CA2024: Nepoužívejte StreamReader.EndOfStream v asynchronních metodách Vlastnost StreamReader.EndOfStream může způsobit nezamýšlené synchronní blokování, pokud nejsou uložena žádná data do vyrovnávací paměti. Místo toho použijte StreamReader.ReadLineAsync() přímo, který vrací null při dosažení konce datového proudu.