Udostępnij za pośrednictwem


Ostrzeżenie CA2014: Nie używaj pętli stackalloc w pętlach

Reguła analizatora kodu platformy .NET CA2014 jest domyślnie włączona, począwszy od platformy .NET 5. Tworzy ostrzeżenie kompilacji dla dowolnego kodu języka C#, w którym wyrażenie stackalloc jest używane wewnątrz pętli.

Opis zmiany

Począwszy od platformy .NET 5, zestaw .NET SDK zawiera analizatory kodu źródłowego platformy .NET. Kilka z tych reguł jest domyślnie włączonych, w tym CA2014. Jeśli projekt zawiera kod, który narusza tę regułę i jest skonfigurowany do traktowania ostrzeżeń jako błędów, ta zmiana może spowodować przerwanie kompilacji.

Reguła CA2014 szuka kodu języka C#, w którym wyrażenie stackalloc jest używane wewnątrz pętli. stackalloc przydziela pamięć z bieżącej ramki stosu. Pamięć nie zostanie zwolniona, dopóki bieżące wywołanie metody nie zostanie zwrócone, co może prowadzić do przepełnienia stosu. Ponieważ nie można przechwycić wyjątków przepełnienia stosu, aplikacja zakończy działanie w przypadku przepełnienia stosu.

Wprowadzona wersja

5,0

  • Unikaj używania pętli stackalloc wewnątrz. Przydziel blok pamięci poza pętlą i użyj go ponownie wewnątrz pętli. Aby uzyskać więcej informacji, zobacz CA2014.

  • Aby całkowicie wyłączyć analizę kodu, ustaw wartość EnableNETAnalyzers na false w pliku projektu. Aby uzyskać więcej informacji, zobacz EnableNETAnalyzers.

Dotyczy interfejsów API

Nie można wykryć za pośrednictwem analizy interfejsu API.