优化ASP中的循环.. Net / c#
本文关键字:Net 循环 ASP 优化 | 更新日期: 2023-09-27 18:07:10
我编写了一个循环来逐个显示List of string中的每一行。问题是该列表包含超过45,000行,并且需要花费大量时间来创建用于显示的页面。
有人能帮我优化一下代码吗?
List<string> OverrrideLog = lc.getOverrideLog();
List<string> AccessLog = lc.getAccessLog();
foreach (string s in OverrrideLog)
lblOverrideLog.Text += s + "<br/>";
foreach (string s in AccessLog)
lblAccessLog.Text += s + "<br/>";
这里lblOverrideLog和lblAccessLog是文字,每个列表都超过22,000行。
您可以使用String。连接方法(String, IEnumerable):
List<string> OverrrideLog = lc.getOverrideLog();
List<string> AccessLog = lc.getAccessLog();
lblOverrideLog.Text = String.Join("<br />", OverrrideLog);
lblAccessLog.Text = String.Join("<br />", AccessLog);
(参见String。Join vs. StringBuilder:哪个更快?)
未经测试,但试试这个:
List<string> OverrrideLog = lc.getOverrideLog();
List<string> AccessLog = lc.getAccessLog();
StringBuilder sb = new StringBuilder();
StringBuilder sb2 = new StringBuilder();
foreach(var el in OverrrideLog)
{
sb.Append(el);
sb.Append(" <br />");
}
foreach(var el in AccessLog)
{
sb2.Append(el);
sb2.Append(" <br />");
}
lblOverrideLog.Text = sb.ToString();
lblAccessLog.Text = sb2.ToString();
编辑:哎呀,用val
代替var
您应该使用StringBuilder
。
像你这样连接字符串会在内存中创建数千个临时字符串。
示例
OverrrideLog.ForEach(x=>{
if (sbOverrideLog.Length > 0)
sbOverrideLog.Append("<br />");
sbOverrideLog.Append(x);
});
AccessLog.ForEach(x =>
{
if (sbAccessLog.Length > 0)
sbAccessLog.Append("<br />");
sbAccessLog.Append(x);
});