【问题标题】:Best practice or performance difference between ToString() and & concatenationToString() 和 & 连接之间的最佳实践或性能差异
【发布时间】:2010-06-01 23:35:47
【问题描述】:

当我在 VB.NET 中将对象值连接在一起形成一个字符串时,在使用 & concat 或 + concat 并调用 .ToString() on 之间是否存在性能差异或推荐的最佳实践每个对象?

示例(更快或最佳实践):

Dim result1 As String = 10 & "em"
Dim result2 As String = 10.ToString() + "em"

【问题讨论】:

  • 您的意思是在第二个示例中使用+,即Dim result2 As String = 10.ToString() + "em"
  • 我一直使用 & 进行连接。恕我直言+只是令人困惑。如果您正在执行大量字符串操作,请使用 stringbuilder。
  • 顺便说一句,ToString() 不是 VB.NET 的一部分。它是 .NET Framework 的一部分。

标签: .net vb.net performance string


【解决方案1】:

没有性能差异。如果您明确省略 .ToString() 调用,编译器基本上只会为您填写。如果您使用 Option Explicit,您将需要调用该方法,否则您将收到编译错误。我听说了在语义上更喜欢 & 和 + 的充分理由,所以选择真的取决于你。

【讨论】:

【解决方案2】:

我从未尝试过,也从未见过两者之间的性能测试,我怀疑是否真的存在速度差异。我觉得使用第一个选项是更好的做法,因为 .ToString() 是推断出来的。让语言像动态语言一样隐藏细节。

【讨论】:

    【解决方案3】:

    字符串是不可变的——这意味着每次操作字符串时,都会创建一个字符串对象的新实例。

    在这些情况下,要获得更好的性能(和一般最佳实践),请使用 System.TextStringBuilder 类。

    在您的示例中(我是 C# 编码器,如果我的 VB 等效项不正确,请致歉)

    Dim result As StringBuilder() = new StringBuilder()
    result.Append("10")
    result.Append("em")
    Dim resultString As String = result.ToString()
    

    只有当您调用StringBuilder 对象的.ToString() 方法时才会创建字符串的实例。

    您应该习惯使用StringBuilder 作为最佳实践。

    【讨论】:

      【解决方案4】:

      您也可以使用 string.concat(str1, str2, str3, str4)。这是一个重载函数,将采用 2-4 个字符串参数。连接 3 或 4 个字符串是最快的选择,因为它被实现为在一个操作中执行连接,这可以节省性能,因为字符串是不可变的。

      一旦你点击了大约 10+ 个字符串,你应该按照 RPM1984 的建议使用 stringbuilder 类。

      否则,我建议使用 '&' 进行字符串连接。它可以避免混淆,因为整数运算很容易混淆“+”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-25
        • 1970-01-01
        相关资源
        最近更新 更多