Condividi tramite


CA2014: Non usare stackalloc nei cicli

Proprietà valore
ID regola CA2014
Title Non usare stackalloc nei cicli
Categoria Affidabilità
Correzione che causa un'interruzione o un'interruzione Nessuna interruzione
Abilitato per impostazione predefinita in .NET 8 Come avviso

Causa

Uso dell'espressione stackalloc C# all'interno di un ciclo.

Descrizione regola

L'espressione C# stackalloc alloca la memoria dal frame dello stack corrente e tale memoria potrebbe non essere rilasciata fino a quando non viene restituita la chiamata al metodo corrente. Se stackalloc viene usato in un ciclo, può causare overflow dello stack a causa dell'esaurimento della memoria dello stack.

Come correggere le violazioni

Spostare l'espressione all'esterno stackalloc di tutti i cicli nel metodo .

Quando eliminare gli avvisi

Può essere sicuro eliminare l'avviso quando il ciclo o i cicli contenitore vengono richiamati solo un numero finito di volte, in modo che la quantità complessiva di memoria allocata in tutte le stackalloc operazioni sia relativamente piccola.

Eliminare un avviso

Se si vuole eliminare una singola violazione, aggiungere direttive del preprocessore al file di origine per disabilitare e quindi riabilitare la regola.

#pragma warning disable CA2014
// The code that's violating the rule is on this line.
#pragma warning restore CA2014

Per disabilitare la regola per un file, una cartella o un progetto, impostarne la gravità none su nel file di configurazione.

[*.{cs,vb}]
dotnet_diagnostic.CA2014.severity = none

Per disabilitare questa intera categoria di regole, impostare la gravità per la categoria su none nel file di configurazione.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none

Per altre informazioni, vedere Come eliminare gli avvisi di analisi del codice.

Vedi anche