奇怪*的問題,我有這樣的代碼:C#*用秒錶和foreach循環
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第三次嘗試。現在
,如果我更改代碼,使該措施將是內 foreach循環:
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.0000027在第二次嘗試中,
[00:00:00.0000013 ,00:00:00.0000011] = 00:00:00.0000024。
?!
根據第一個結果完全是廢話......我聽說foreach
循環很慢,但從來沒有想到,它是所以慢......是這樣嗎?
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循環(不包括循環中的操作)非常慢?是啊? –