Я столкнулся с случаем, когда foreach ПУТЬ быстрее, чем For
почему foreach работает быстрее цикла for при чтении строк richtextbox
У меня был случай, похожий на ФП в этом вопросе.
Текстовое окно, читающее о 72K строках, и я обращался к свойству Lines (на самом деле это метод получения). (И, очевидно, часто в winforms есть методы получения, которые не являются O (1). Я предполагаю, что это O (n), поэтому, чем больше текстовое поле, тем больше времени требуется, чтобы получить значение из этого «свойства». цикл, который у меня был в качестве OP, имел for(int i=0;i<textBox1.lines.length;i++) str=textBox1.Lines[i]
, и он был действительно довольно медленным, так как он читал все текстовое поле каждый раз, когда читал строку, плюс он читал все текстовое поле каждый раз, когда проверял условие.
Джон Скит показывает, что вы можете получить доступ к свойству Lines только один раз (даже не один раз за итерацию, а только один раз). Вместо того, чтобы дважды на каждой итерации (что составляет тонну раз). Do string [] strarrlines = textBox1.Lines; и перебрать страрлинии.
Но, конечно, цикл for в довольно интуитивно понятной форме и доступ к свойству Lines очень неэффективен
for (int i = 0; i < richTextBox.Lines.Length; i++)
{
s = richTextBox.Lines[i];
}
для текстового поля или расширенного текстового поля, это очень медленно.
Оператор тестирования, тестируя этот цикл в расширенном текстовом поле, обнаружил, что «с циклом 15000 lines.for потребовалось 8 минут, чтобы просто зациклиться до 15000 строк, тогда как foreach потребовал доли секунды для его перечисления».
OP в этой ссылке обнаружил, что этот foreach гораздо более эффективен, чем его (тот же OP) для цикла, упомянутого выше. Как и я.
String s=String.Empty;
foreach(string str in txtText.Lines)
{
s=str;
}