私はこのコードを持っています:
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 を 2 回目の試行で、
00:00:00.0004281 を 3 回目の試行で書き込みます。
ここで、メジャーが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: 2 回目の試行では 00:00.0000027 となり、3 回目の試行では
[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;
}
}
ありがとう。