繁体   English   中英

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

[英]Optimize loop in ASP.Net / C#

我写了一个循环来逐字显示每一行。 问题是该列表包含更多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.Join方法(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();

编辑:

woops,把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);
            });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM