Поделиться через


Предупреждение CA2014: не используйте stackalloc в циклах

Начиная с .NET 5 правило CA2014 анализатора кода .NET включено по умолчанию. Оно создает предупреждение сборки для любого кода C#, в котором используется выражение stackalloc внутри цикла.

Описание изменения

Начиная с .NET 5 пакет SDK для .NET включает анализаторы исходного кода .NET. Некоторые из этих правил включены по умолчанию, в том числе CA2014. Если проект содержит код, нарушающий это правило и настроенный на обработку предупреждений как ошибок, это изменение может нарушить сборку.

Правило CA2014 ищет код C#, в котором выражение stackalloc используется внутри цикла. stackalloc выделяет память из текущего кадра стека. Память не освобождается до тех пор, пока не будет возвращен текущий вызов метода, что может привести к переполнению стека. Так как вы не можете перехватывать исключения переполнения стека, в таком случае работа приложения будет завершена.

Представленные версии

5,0

  • Старайтесь не использовать stackalloc в циклах. Выделяйте блок памяти за пределами цикла и используйте его повторно внутри цикла. См. раздел CA2014.

  • Чтобы полностью отключить анализ кода, задайте для параметра EnableNETAnalyzers значение false в файле проекта. Дополнительные сведения см. в разделе EnableNETAnalyzers.

Затронутые API

Невозможно обнаружить с помощью анализа API.