gpt4 book ai didi

c# - 对一个字符串使用多个字符串生成器

转载 作者:搜寻专家 更新时间:2023-10-31 08:12:43 25 4
gpt4 key购买 nike

所以我主要是一名 C# 和 Java 开发人员,但我想这个问题可能与使用 StringBuilder 或其某些派生语言的任何编程语言有关。

好吧,这或多或少是常识,即使是连接少量的字符串也可能成为主要的性能 killer (尽管这也是值得商榷的)。我的问题是是否有人知道在字符串生成器中使用字符串生成器的性能影响。为了阐明我的意思,让我包含一些有助于说明我的观点的虚拟代码。

我还意识到调用 StringBuilder 的多个实例自然会影响性能,但我认为我调用它的次数不足以导致任何真正的性能问题。 (这个假设也可能是错误的任何意见也会有所帮助)

public string StringToGet()
{
StringBuilder sb = new StringBuilder("Some Text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append(MethodThatCreatesAnotherString());
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append(MethodThatCreatesAnotherString());
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append(MethodThatCreatesAnotherString());
//etc

return sb.toString();

}

private string MethodThatCreatesAnotherString()
{
StringBuilder sb = new StringBuilder("Other text");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");

return sb.ToString();
}

逻辑告诉我这应该不是问题,但我觉得这种方法有些不对劲。任何人都可以阐明以下问题

  1. 与不使用其他方法和使用单个 StringBuilder 相比,这是否会显着产生更大的性能损失
  2. 是合理可接受的做法。

任何现场对此将不胜感激。

最佳答案

通常,如果直接字符串连接的数量超过 5,最好使用 StringBuilder。如果您可以控制反过来构建字符串的方法,为什么不考虑将您的 StringBuilder 传递到该方法中呢?

public void MethodThatCreatesAnotherString(StringBuilder sb)
{
// code that appends to StringBuilder
}

因此,当需要调用该函数时,您传入当前的 StringBuilder,并且不会损失性能,但这是以潜在的混淆为代价的。

就是说,除非您涉及成百上千个这样的操作,否则我不会担心此处的过早优化。您的主要性能损失是必须执行两次(即在方法中附加字符串,然后附加完整的字符串),但您仍然不会将性能损失达到使用的程度+ 连接。

编辑:一个说明如何使用它的示例:

string SomeMethodCreatingAString()
{
StringBuilder sb = new StringBuilder();
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
sb.append("more text to add");
MethodThatCreatesAnotherString(sb);
// more text
return sb.ToString();
}

因此,您永远不会附加来自第二种方法的字符串,您只需在该方法中使用相同的StringBuilder。希望这是有道理的。

关于c# - 对一个字符串使用多个字符串生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6867940/

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