Что касается скорости, есть несколько переменных, зависит от контекста. Например, в кодовой базе с автоматическим управлением памятью, такой как C #, вы можете получить пики распределения, которые могут повлиять на частоту кадров в чем-то вроде, скажем, игры. Хорошая оптимизация, которую вы можете сделать для этого вместо foreach - это перечислитель с циклом while:
var enumerator = stack.GetEnumerator();
while(enumerator.MoveNext ()) {
// do stuff with enumerator value using enumerator.Current
enumerator.Current = blah
}
Что касается тестов ЦП, это, вероятно, не быстрее, чем foreach, но foreach может иметь непреднамеренные скачки распределения, которые в конечном итоге могут "замедлить" производительность вашего приложения.