gpt4 book ai didi

c# - foreach 比在 .cs 上构建字符串慢?

转载 作者:行者123 更新时间:2023-11-30 15:04:29 24 4
gpt4 key购买 nike

今天一位同事告诉我,更快地在 ascx.cs 上构建整个字符串,使用 foreach 和 String Builder(因此,在字符串中编写 html 代码)并将其作为 <%=myStringGenerateByStringBuilder%> 发布在 ascx 的末尾,而不是直接在 ascx 上使用 foreach,例如:

<% foreach (var thing in things)
{ %>
<div><p><%= thing.Description %></p></div>
<% }; %>

这是因为打开<%并关闭 %>很贵。

这是真的吗?我不谈论管理代码(我使用的是第二种方法,非常干净和简单),我谈论生成代码的性能。

最佳答案

好吧,一些测试:

void Main()
{
var things = Enumerable
.Range(1, 2000000)
.Select(r => new Thing {Description = r.ToString()})
.ToList();

var times = Enumerable.Range(1, 10)
.Select(t => new
{
Method1 = Test(Method1, things),
Method2 = Test(Method2, things),
}
).ToList();
var average = new {
Method1 = TimeSpan.FromMilliseconds( times.Sum(t=>t.Method1.TotalMilliseconds) / times.Count),
Method2 = TimeSpan.FromMilliseconds( times.Sum(t=>t.Method2.TotalMilliseconds) / times.Count),
};
average.Dump();
}

public TimeSpan Test(Action<IEnumerable<Thing>> action, IEnumerable<Thing> things)
{
var stopWatch = new Stopwatch();
stopWatch.Start();
action(things);
stopWatch.Stop();
return stopWatch.Elapsed;
}

public void Method1(IEnumerable<Thing> things)
{
var sb = new StringBuilder();
using (var stringWriter = new StringWriter(sb) )
{
using (var htmlWriter = new HtmlTextWriter(stringWriter))
{
foreach (var thing in things)
{
htmlWriter.Write(thing.Description);
}
}
}
}


public void Method2(IEnumerable<Thing> things)
{
var thingsBuilder = new StringBuilder();
foreach ( var thing in things)
thingsBuilder.Append(thing.Description);
var thingsText = thingsBuilder.ToString();
var sb = new StringBuilder();
using (var stringWriter = new StringWriter(sb) )
{
using (var htmlWriter = new HtmlTextWriter(stringWriter))
{
htmlWriter.Write(thingsText);
}
}
}

public class Thing
{
public string Description {get; set;}
}
// Define other methods and classes here

(use linq pad)

enter image description here

但是,我怀疑有人会在网页中写入 20 亿个字符串。对于较小的列表,没有区别。即使我设置了 StringBuilder 的容量,它仍然会变慢。所以,是的,使用 HtmlTextWriter 直接写入许多小字符串会比从这些字符串构建一个字符串然后写入它更快。

关于c# - foreach 比在 .cs 上构建字符串慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10248010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com