Reguły dotyczące niezawodności
Reguły niezawodności obsługują bibliotekę i niezawodność aplikacji, takie jak prawidłowe użycie pamięci i wątków. Reguły niezawodności obejmują:
Reguła | opis |
---|---|
CA2000: Likwiduj obiekty przed utratą zakresu | Ze względu na to, że może wystąpić wyjątkowe zdarzenie, które uniemożliwi uruchomienie finalizatora obiektu, obiekty powinny być jawnie usuwane, zanim wszystkie odwołania do niego znajdą się poza zakresem. |
CA2002: Nie blokuj obiektów o słabej tożsamości | Obiekt ma słabą tożsamość, gdy można uzyskać do niego bezpośredni dostęp poza granicami domeny aplikacji. Wątek, który próbuje uzyskać blokadę na obiekcie o słabej tożsamości, może zostać zablokowany przez drugi wątek w domenie innej aplikacji, która ma blokady dla tego samego obiektu. |
CA2007: Nie czekaj bezpośrednio na zadanie | Metoda asynchroniczna oczekujeTask bezpośrednio. |
CA2008: Nie twórz zadań bez przekazywania elementu TaskScheduler | Operacja tworzenia lub kontynuacji zadania używa przeciążenia metody, które nie określa parametru TaskScheduler . |
CA2009: Nie należy wywoływać metody ToImmutableCollection na wartości ImmutableCollection | ToImmutable metoda została niepotrzebnie wywołana w niezmiennej kolekcji z System.Collections.Immutable przestrzeni nazw. |
CA2011: Nie przypisuj właściwości w jej ustawieniu | Właściwość została przypadkowo przypisana wartość w ramach własnego zestawu dostępu. |
CA2012: Poprawnie użyj wartościTasks | WartościZadania zwracane z wywołań składowych mają być bezpośrednio oczekiwane. Próby wielokrotnego korzystania z elementu ValueTask lub bezpośredniego uzyskania dostępu do wyniku, zanim wiadomo, że zostanie ukończone, mogą spowodować wyjątek lub uszkodzenie. Ignorowanie takiej wartościTask jest prawdopodobnie wskazaniem usterki funkcjonalnej i może obniżyć wydajność. |
CA2013: Nie używaj właściwości ReferenceEquals z typami wartości | Podczas porównywania wartości przy użyciu metody System.Object.ReferenceEquals, jeśli objA i objB są typami wartości, są one w polu przed przekazaniem ReferenceEquals ich do metody . Oznacza to, że nawet jeśli zarówno objA, jak i objB reprezentują to samo wystąpienie typu wartości, ReferenceEquals metoda zwraca jednak wartość false. |
CA2014: Nie używaj pętli stackalloc w pętlach. | Miejsce na stos przydzielone przez stosalloc jest zwalniane tylko na końcu wywołania bieżącej metody. Użycie go w pętli może spowodować niezwiązane wzrost stosu i ostateczne warunki przepełnienia stosu. |
CA2015: Nie należy definiować finalizatorów dla typów pochodzących z klasy MemoryManager<T> | Dodanie finalizatora do typu pochodzącego z MemoryManager<T> klasy może pozwolić na zwolnienie pamięci, gdy jest ona nadal używana przez element Span<T>. |
CA2016: Przekaż parametr CancellationToken do metod, które przyjmują jeden | CancellationToken Przekaż parametr do metod, które przyjmują jeden, aby upewnić się, że powiadomienia anulowania operacji są prawidłowo propagowane lub przekazywane CancellationToken.None jawnie, aby wskazać celowo nie propagację tokenu. |
CA2017: Niezgodność liczby parametrów | Liczba parametrów podanych w szablonie komunikatu rejestrowania nie jest zgodna z liczbą nazwanych symboli zastępczych. |
CA2018: count Argument, który Buffer.BlockCopy ma określać liczbę bajtów do skopiowania |
W przypadku używania Buffer.BlockCopy count argument określa liczbę bajtów do skopiowania. Argumentu należy używać Array.Length count tylko w przypadku tablic, których elementy są dokładnie jednym bajtem rozmiaru. byte , sbyte i bool tablice mają elementy o rozmiarze jednego bajtu. |
CA2019: ThreadStatic pola nie powinny używać inline initialization |
Pole z adnotacjami ThreadStaticAttribute jest inicjowane w tekście lub jawnie w konstruktorze static (Shared w Visual Basic). |
CA2020: Zapobieganie zmianom behawioralnym spowodowanym przez wbudowane operatory intPtr/UIntPtr | Niektóre wbudowane operatory dodane na platformie .NET 7 zachowują się inaczej niż operatory zdefiniowane przez użytkownika na platformie .NET 6 i starszych wersjach. Niektóre operatory, które były używane do zgłaszania nieznaczonego kontekstu podczas przepełnienia nie są już zgłaszane, chyba że opakowane w kontekście sprawdzonym. Niektóre operatory, które wcześniej nie zgłaszały zaznaczonego kontekstu, zgłaszają teraz, chyba że są opakowane w nieznakowanym kontekście. |
CA2021: Nie wywoływanie funkcji Enumerable.Cast<T> lub Enumerable.OfType<T> z niezgodnymi typami | Wywołanie metody Enumerable.Cast<TResult>(IEnumerable) lub Enumerable.OfType<TResult>(IEnumerable) określa parametr typu niezgodny z typem kolekcji wejściowej. |
Współpracuj z nami w serwisie GitHub
Źródło tej zawartości można znaleźć w witrynie GitHub, gdzie można również tworzyć i przeglądać problemy i żądania ściągnięcia. Więcej informacji znajdziesz w naszym przewodniku dla współtwórców.