У меня есть этот код:C# * Странные * проблемы с секундомером и петлей Еогеаспа
var options = GetOptions(From, Value, SelectedValue);
var stopWatch = System.Diagnostics.Stopwatch.StartNew();
foreach (Option option in options)
{
stringBuilder.Append("<option");
stringBuilder.Append(" value=\"");
stringBuilder.Append(option.Value);
stringBuilder.Append("\"");
if (option.Selected)
stringBuilder.Append(" selected=\"selected\"");
stringBuilder.Append('>');
stringBuilder.Append(option.Text);
stringBuilder.Append("</option>");
}
HttpContext.Current.Response.Write("<b>" + stopWatch.Elapsed.ToString() + "</b><br>");
Он пишет:
00: 00: 00.0004255 в первой попытке (не в отладке)
00 : 00: 00.0004260 во второй попытке и
00: 00: 00.0004281 с третьей попытки.
Теперь, если я изменить код, чтобы эта мера будет внутри цикла Еогеасп:
var options = GetOptions(From, Value, SelectedValue);
foreach (Option option in options)
{
var stopWatch = System.Diagnostics.Stopwatch.StartNew();
stringBuilder.Append("<option");
stringBuilder.Append(" value=\"");
stringBuilder.Append(option.Value);
stringBuilder.Append("\"");
if (option.Selected)
stringBuilder.Append(" selected=\"selected\"");
stringBuilder.Append('>');
stringBuilder.Append(option.Text);
stringBuilder.Append("</option>");
HttpContext.Current.Response.Write("<b>" + stopWatch.Elapsed.ToString() + "</b><br>");
}
... Я получаю
[00: 00: 00,0000014, 00: 00: 00,0000011] = 00: 00: 00.0000025 с первой попытки (не отлаживается),
[00: 00: 00.0000016, 00: 00: 00.0000011] = 00: 00: 00.0000011] = 00: 00: 00.0000027 во второй попытке и
[00: 00: 00.0000013] , 00: 00: 00.0000011] = 00: 00: 00.0000024 с третьей попытки.
?!
Это абсолютно неудовлетворительно в соответствии с первыми результатами ... Я слышал, что петля медленная, но никогда не предполагала, что это , поэтому медленный ... Это что?
options
имеет 2 опции. Вот option
класс, если это необходимо:
public class Option
{
public Option(string text, string value, bool selected)
{
Text = text;
Value = value;
Selected = selected;
}
public string Text
{
get;
set;
}
public string Value
{
get;
set;
}
public bool Selected
{
get;
set;
}
}
Спасибо.
Ну, на самом деле, в чем вопрос? «Почему случай 2 часа быстрее, чем случай 1?» Или это «почему цикл« foreach »настолько медленный?» –
Почему случай 2 часа быстрее, чем случай 1 –
@Alon: Я вижу, поэтому вы спрашиваете, почему итерация через цикл foreach (исключая операции с циклом) настолько медленная? Да? –