C'est ça, un foreach montre clairement l'intention de ton code à la relecture ce qui est une bonne chose.
Pour être franc, je n'exclue pas que tu tombes sur un benchmark obscur qui cherche à prouver qu'une boucle for est plus rapide qu'un foreach après 2 millions d'itération.
Genre, la boucle for fait 50ms, et la boucle foreach 150ms admettons. Un écart de 100ms soit...
Cependant, il faut bien se rendre compte que si un tour de boucle dure 0.5ms, après 2m d'itérations, la boucle dure environ 17 minutes. Donc l'overhead de 100ms sur une boucle qui dire 70 min, il justifie pas une optimisation.
Moralité, faut commencer par faire au plus lisible, et ensuite passer à la micro-optimisation.