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
Ação recomendada
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
comofalse
no arquivo de projeto. Para obter mais informações, confira EnableNETAnalyzers.
APIs afetadas
Não detectáveis com a análise de API.