【问题标题】:string.Replace or stringBuilder.Replace()string.Replace 或 stringBuilder.Replace()
【发布时间】:2013-10-03 09:30:12
【问题描述】:

我是 C# 新手,所以请原谅我的错误。

我想在每次调用那段代码时替换字符串的某些部分(每次调用 2-4 次)。 我想知道在性能方面使用哪种方法更好:string.ReplacestringBuilder.Replace()

如果这段代码被同时调用 10000 次怎么办?

【问题讨论】:

  • 如果您有StringBuilder,请使用StringBuilder.Replace,如果您有String,请使用String.Replace。所以基本上你在问什么更快,StringStringBuilder。这取决于,自己测量。首先编写清晰易读的代码,如果确实需要,稍后再优化性能。
  • 请注意,这两个Replace 方法被不同的类使用。所以..
  • @PhilippM:这就是我想要的。非常感谢.. :)

标签: c# string stringbuilder


【解决方案1】:

String替换不同于StringBuilder替换。但表面上它们是一样的。 StringBuilder 纯粹是一种优化,但考虑到字符串使用的普遍性,这很关键。String.Replace 总是创建一个新字符串——StringBuilder.Replace 不会。

【讨论】:

    【解决方案2】:

    找出哪个更快的最佳方法是针对您的特定问题对其进行基准测试 - 编写一个简单的测试工具并为这两个选项计时。

    话虽如此 - C# 字符串是immutable,这意味着它们在创建后无法更改。当您调用String.Replace 时,运行时必须为结果创建一个新的String 实例。这意味着对同一字符串的一系列更改会很慢,因为运行时必须为每次操作创建一个新对象,分配内存并每次复制字符串数据。

    StringBuilder 专门为这种情况设计为可变字符串 - 以避免在每次操作时创建新的 String 实例。

    因此,如果您对同一字符串执行一系列 Replace 调用,StringBuilder 几乎肯定会更快。

    【讨论】:

      【解决方案3】:

      创建字符串后使用String.Replace(),它将立即替换所有位置。 如果你用一些例子来解释你的场景会更好。

      看看这个链接,它有一个很好的描述:Comparing RegEx.Replace, String.Replace and StringBuilder.Replace – Which has better performance?

      猜你喜欢
      • 1970-01-01
      • 2011-09-25
      • 2010-12-09
      • 2013-05-08
      • 2010-09-22
      • 2012-02-28
      • 1970-01-01
      • 1970-01-01
      • 2010-09-12
      相关资源
      最近更新 更多