【问题标题】:Optimize loop in ASP.Net / C#在 ASP.Net / C# 中优化循环
【发布时间】:2011-11-08 08:09:15
【问题描述】:

我写了一个循环来逐行显示字符串列表中的每一行。 问题是该列表包含超过 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 行。

【问题讨论】:

  • 使用StringBuilder!
  • 使用String.Join Method (String, String[])
  • @CD 号,String.Join Method (String, IEnumerable&lt;String&gt;). He already has a List`
  • xanatos:是的,你是对的..

标签: c# asp.net optimization


【解决方案1】:

您可以使用String.Join 方法(字符串,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: which is faster?

【讨论】:

  • 非常感谢 :) 我使用了这个和 SBlackler 回答的那个。两者都工作得很好!
  • 诚然,我不知道String.Join是这样的+1
【解决方案2】:

未经测试,但试试这个:

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

【讨论】:

  • 非常感谢 :) 我用过这个和 CD 回答的那个。两者都工作得很好
【解决方案3】:

举个例子

            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);
            });

【讨论】:

    【解决方案4】:

    您应该使用StringBuilder

    像您这样连接字符串会在内存中创建数千个临时字符串。

    【讨论】:

    • George,对不起:我把你的评论加红并开始写答案……但你是第一个,所以你更喜欢我删除我的答案吗? :)
    猜你喜欢
    • 2011-07-01
    • 1970-01-01
    • 2014-07-30
    • 2017-02-28
    • 2011-08-31
    • 2013-05-30
    • 2018-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多