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.