CA2014: Não usar stackalloc em loops
Property | Valor |
---|---|
ID da regra | CA2014 |
Título | Não usar stackalloc em loops |
Categoria | Confiabilidade |
Correção interruptiva ou sem interrupção | Sem interrupção |
Habilitado por padrão no .NET 8 | Como aviso |
Causa
Usando a expressão stackalloc de C# dentro de um loop.
Descrição da regra
A expressão stackalloc
de C# aloca memória do registro de ativação atual e essa memória pode não ser liberada até que a chamada do método atual retorne. Se stackalloc
for usado em um loop, ele poderá levar a excedentes de pilha devido ao esgotamento da memória da pilha.
Como corrigir violações
Mova a expressão stackalloc
para fora de todos os loops no método.
Quando suprimir avisos
Pode ser seguro suprimir o aviso quando o loop ou loops recipientes são invocados apenas um número finito de vezes, de modo que a quantidade geral de memória alocada em todas as operações stackalloc
é conhecida por ser relativamente pequena.
Suprimir um aviso
Para suprimir apenas uma violação, adicione diretivas de pré-processador ao arquivo de origem a fim de desabilitar e, em seguida, reabilitar a regra.
#pragma warning disable CA2014
// The code that's violating the rule is on this line.
#pragma warning restore CA2014
Para desabilitar a regra em um arquivo, uma pasta ou um projeto, defina a severidade como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_diagnostic.CA2014.severity = none
Para desabilitar toda essa categoria de regras, defina a gravidade da categoria como none
no arquivo de configuração.
[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Reliability.severity = none
Para obter mais informações, confira Como suprimir avisos de análise de código.