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

C# ASP.Net/C中的循环优化#,c#,asp.net,optimization,C#,Asp.net,Optimization,我编写了一个循环来显示字符串列表中的每一行。 问题是列表包含45000多行,创建用于显示的页面需要花费大量时间 有人能帮助优化代码吗 List<string> OverrrideLog = lc.getOverrideLog(); List<string> AccessLog = lc.getAccessLog(); foreach (string s in OverrrideLog) lblOve

我编写了一个循环来显示字符串列表中的每一行。 问题是列表包含45000多行,创建用于显示的页面需要花费大量时间

有人能帮助优化代码吗

        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/>";
List overridelog=lc.getOverrideLog();
List AccessLog=lc.getAccessLog();
foreach(overridelog中的字符串s)
lblOverrideLog.Text+=s+“
”; foreach(AccessLog中的字符串s) lblAccessLog.Text+=s+“
”;
这里的lblOverrideLog和lblAccessLog是文本,每个列表有22000多行。

您应该使用一个

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

未经测试,但请尝试以下操作:

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();
List overridelog=lc.getOverrideLog();
List AccessLog=lc.getAccessLog();
StringBuilder sb=新的StringBuilder();
StringBuilder sb2=新的StringBuilder();
foreach(在Overridelog中的var el)
{
某人追加(el);
sb.追加(“
”); } foreach(AccessLog中的变量el) { sb2.追加(el); sb2.追加(“
”); } lblOverrideLog.Text=sb.ToString(); lblAccessLog.Text=sb2.ToString();
编辑:

woops,对于exsample,将
val
替换为
var

            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);
            });
overridelog.ForEach(x=>{
如果(sbelog.Length>0)
sbOverrideLog.Append(“
”); sbelog.Append(x); }); AccessLog.ForEach(x=> { 如果(sbAccessLog.Length>0) sbAccessLog.Append(“
”); sbAccessLog.Append(x); });
您可以使用该方法(字符串,IEnumerable):

List overridelog=lc.getOverrideLog();
List AccessLog=lc.getAccessLog();
lblOverrideLog.Text=String.Join(“
”,overridelog); lblAccessLog.Text=String.Join(“
”,AccessLog);

(另请参见)

使用
StringBuilder
!使用
String.Join方法(String,String[])
@CD-No,
String.Join方法(String,IEnumerable)。他已经有了一个
列表`xanatos:是的,你是对的..读这篇文章乔治,对不起:我把你的评论删掉,开始写答案。。。但是你是第一个,所以你希望我删除我的答案吗?:)非常感谢:)我用了这个,还有一个是斯布雷克勒回答的。两个都工作得很好!诚然,我不知道
String.Join
以这种方式+1谢谢:)我用了这个和CD回答的那个。两者都很好
List<string> OverrrideLog = lc.getOverrideLog();
List<string> AccessLog = lc.getAccessLog();

lblOverrideLog.Text = String.Join("<br />", OverrrideLog);
lblAccessLog.Text = String.Join("<br />", AccessLog);