2016-02-18 3 views
2

Я читал много раз, когда foreach выполнял бит менее эффективно, чем для массивов (потому что ему нужно было построить/использовать итератор), и люди выступали за использование вместо циклов.Не оптимизирует ли компилятор C# foreach?

Я немного удивлен, что компилятор не оптимизирует его (aka: преобразование его в простой код кода IL). Компилятор visual studio 2015 делает это для нас (возможности C# 6), почему бы не исправить это «не так хорошо известное» неправильное использование foreach?

+2

Это звучит не так, и я хотел бы попросить людей, выступающих против 'foreach', поддержать свои требования, а не другие здесь, на SO. Откуда вы узнали об этом? – hvd

+0

Если есть измеримая разница в производительности - это важно *? Вместо того, чтобы микро-оптимизировать цикл через массивы, я обычно ставил под вопрос использование массивов в первую очередь. –

+0

Возможный дубликат [В .NET, цикл которого работает быстрее, «для» или «foreach»?] (Http://stackoverflow.com/questions/365615/in-net-which-loop-runs-faster-for- или-Еогеасп) – HugoRune

ответ

4

Утверждение, что foreach хуже работает на массивах, чем for. Джон тарелочки сделали сравнение производительности как:

и пришли к выводу, что для массивов «компилятор генерирует в значительной степени тот же код» и что для его эталона, «результатов в основном то же самое ».