CA2014: Nie używaj pętli stackalloc w pętlach
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA2014 |
Tytuł | Nie używaj słowa kluczowego stackalloc w pętlach |
Kategoria | Niezawodność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako ostrzeżenie |
Przyczyna
Za pomocą wyrażenia stackalloc języka C# wewnątrz pętli.
Opis reguły
Wyrażenie języka C# stackalloc
przydziela pamięć z bieżącej ramki stosu, a pamięć może nie zostać zwolniona, dopóki bieżące wywołanie metody nie zostanie zwrócone. Jeśli stackalloc
jest używana w pętli, może to prowadzić do przepełnienia stosu z powodu wyczerpania pamięci stosu.
Jak naprawić naruszenia
stackalloc
Przenieś wyrażenie poza wszystkie pętle w metodzie .
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć ostrzeżenie, gdy pętla zawierająca lub pętle są wywoływane tylko przez ograniczoną liczbę razy, tak aby ogólna ilość pamięci przydzielonej we wszystkich stackalloc
operacjach była stosunkowo mała.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA2014
// The code that's violating the rule is on this line.
#pragma warning restore CA2014
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA2014.severity = none
Aby wyłączyć tę całą kategorię reguł, ustaw ważność dla kategorii na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.