foreach, если for быстрее?"Здесь важно понимать, чем отличаются эти циклы.
▪️for - это классический управляющий оператор, который транслируется в +/- одинаковый IR или машинный код практически во всех языках программирования согласно блок-схеме выше.Принцип его работы одинаков везде:
for (выражение1; выражение2; выражение3)
оператор
▪️foreach - это синтаксический сахар над итераторами, который ещё и работает согласно принципам утиной типизации.Перебираемому объекту даже не обязательно реализовывать
IEnumerable.Разворачивается такой цикл примерно в следующее:
var enumerator = enumerable.GetEnumerator();
while (enumerator.MoveNext())
{
var item = enumerator.Current;
// ...
}
Невооружённым глазом видно, что здесь происходит вызов через VMT, возможен cast, выделение памяти и так далее.Обслуживание
foreach очевидно дороже, потому что это абстракция.Так что использование везде
for вместо foreach - скорее микрооптимизация.#полезное #tips
