В C# цикл foreach часто воспринимается как самая удобная и красивая форма для обхода коллекций. Но в вопросах производительности
foreach не всегда оптимален.Почему лучше избегать
foreach:•
foreach использует итератор — для массивов его оптимизируют, но для списков, словарей и других коллекций создаётся объект или struct-итератор.• под капотом
foreach может создавать временные объекты, что увеличивает нагрузку на сборщик мусора и снижает производительность.•
foreach всегда выполняет проверки и гарантирует корректность обхода, но это стоит некоторой производительности.Что использовать вместо foreach:
Цикл for с индексом, особенно для массивов:
for (int i = 0; i < data.Length; i++)
{
// работа с data[i]
}
Span<T> и его методы — для обхода данных без выделения памяти и избыточных проверок:var span = data.AsSpan();
for (int i = 0; i < span.Length; i++)
{
// работа с span[i]
}
Когда можно использовать
foreach:• Если цикл выполняется нечасто или количество элементов небольшое.
• Для обхода коллекций, где критичен чистый и понятный стиль программирования.
🐸Библиотека шарписта
#sharp_view
