Share via


Aviso CA2014: não usar stackalloc em loops

A regra do analisador de código .NET CA2014 está habilitada, por padrão, a partir do .NET 5. Ela produz um aviso de build para qualquer código C# em que uma expressão stackalloc é usada dentro de um loop.

Descrição das alterações

Do .NET 5 em diante, o SDK do .NET inclui Analisadores de código-fonte do .NET. Várias dessas regras estão habilitadas, por padrão, inclusive a CA2014. Se o projeto contiver um código que viole essa regra e estiver configurado para tratar avisos como erros, essa alteração poderá interromper o build.

A regra CA2014 procura o código C# em que uma expressão stackalloc é usada dentro de um loop. stackalloc aloca memória do registro de ativação. A memória não será liberada até que a chamada do método atual retorne, o que poderá resultar em excedentes de pilha. Como não é possível capturar as exceções de excedente de pilha, o aplicativo encerrará em caso de excedente de pilha.

Versão introduzida

5,0

  • Evite usar stackalloc nos loops. Aloque o bloco de memória fora do loop e reutilize-o dentro do loop. Para obter mais informações, consulte CA2014.

  • Para desabilitar completamente a análise de código, defina EnableNETAnalyzers como false no arquivo de projeto. Para obter mais informações, confira EnableNETAnalyzers.

APIs afetadas

Não detectáveis com a análise de API.