Compartilhar via


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.

Confira também