c# - 在 C# 中使字符串连接更快

标签 c# .net string c#-4.0 concatenation

<分区>

Possible Duplicate:
What's the best string concatenation method using C#?

你好,

我有一个这样的代码片段,其中从文件中读取大量数据并检查每个位置的某个值并连接一个字符串。

这种字符串连接需要大量的时间和处理能力。有没有一种方法可以减少执行时间?

重要提示:阅读内容文件语法不正确,只需要给出一个想法

string x;

while (var < File.Length)
{
  if (File.Content[var] == "A")
  {
       x += 1;    
  }
  else
  {
     x += 0;
  }
  var++;
}

最佳答案

使用StringBuilder而不是字符串连接。

StringBuilder 对象维护一个缓冲区以容纳新数据的串联。如果有可用空间,新数据将附加到缓冲区的末尾;否则,分配一个新的更大的缓冲区,将原始缓冲区中的数据复制到新缓冲区,然后将新数据附加到新缓冲区。

String 相反是不可变的,每次连接它都会创建一个新对象并丢弃旧对象,这是非常低效的。

此外,如果您知道结果会很大,您可能希望提前为 StringBuilder 设置高容量。这将减少缓冲区重新分配的次数。

你的伪代码看起来像这样:

StringBulder x = new StringBuilder(10000); // adjust capacity to your needs

while (var < File.Length)
{
   if(File.Content[var] == "A")
      x.Append("1"); // or AppendLine, or AppendFormat
   else
      x.Append("2");
}

关于c# - 在 C# 中使字符串连接更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6165998/

相关文章:

c# - 错误处理超过10的重试计数

c# - 亡灵形态仍在产生事件

c# - 将一个字符串拆分为两个字符串

java - String.length() 和 string.toCharArray().length 的速度/效率权衡

c# - 获取要序列化的扩展 LINQ 类属性

c# - 在 Azure 中托管 WCF 和可扩展性怎么样?

c# - 从作为 SYSTEM 运行的可以与用户交互的服务启动应用程序

.net - 为什么程序集绑定(bind)重定向在我的网站中不起作用?

java - 在字符串中插入变量

java - 在java中对二维数组进行排序(对所有字母进行排序)