Por que foreach é mais rápido que o loop durante a leitura de linhas richtextbox?

Existem duas maneiras de ler dados do RichTextBox linha por linha

1) use um loop for para percorrer as linhas de um richtextBox

String s=String.Empty;
for(int i=0;i<richtextbox.lines.length;i++)
 {
     s=richTextBox.Lines[i]
 }

2) use um loop foreach para enumerar a coleção richTextBox.Lines

   String s=String.Empty;
   foreach(string str in txtText.Lines)
    {
       s=str;
    }

Há uma enorme diferença no desempenho quando usamos o loop foreach para enumerar a coleção de matriz para richtextbox.

Eu tentei com 15.000 linhas. Para loop levou 8 minutos para apenas loop para 15000 linhas. While foreach levou fração de segundo para enumerá-lo.

Por que esse comportamento está aí?

questionAnswers(5)

yourAnswerToTheQuestion