Partilhar via


CA2014: Não use stackalloc em loops

Property valor
ID da regra CA2014
Título Não use stackalloc em loops
Categoria Fiabilidade
A correção está quebrando ou não quebrando Sem quebra
Habilitado por padrão no .NET 8 Como aviso

Motivo

Usando a expressão stackalloc C# dentro de um loop.

Descrição da regra

A expressão C# stackalloc aloca memória do quadro de pilha atual, e essa memória não pode ser liberada até que a chamada de método atual retorne. Se stackalloc for usado em um loop, pode levar a estouros de pilha devido ao esgotamento da memória da pilha.

Como corrigir violações

Mova a stackalloc expressão para fora de todos os loops no método.

Quando suprimir avisos

Pode ser seguro suprimir o aviso quando o loop ou loops de contenção são invocados apenas um número finito de vezes, de modo que a quantidade total de memória alocada em todas as stackalloc operações é conhecida por ser relativamente pequena.

Suprimir um aviso

Se você quiser apenas suprimir uma única violação, adicione diretivas de pré-processador ao seu arquivo de origem para desativar e, em seguida, reativar 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 para um arquivo, pasta ou projeto, defina sua severidade como none no arquivo de configuração.

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

Para desativar toda essa categoria de regras, defina a severidade da categoria como none no arquivo de configuração.

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

Para obter mais informações, consulte Como suprimir avisos de análise de código.

Consulte também