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 count Buffer.BlockCopy by měl určovat počet bajtů, které se mají kopírovat |
Při použití Buffer.BlockCopy urč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 , sbyte a 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. |
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.