优化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行。

优化ASP中的循环.. Net / c#

您可以使用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);
            });