【问题标题】:Which string concatenation got more Performance in VB.NET哪个字符串连接在 VB.NET 中获得了更高的性能
【发布时间】:2023-03-11 17:10:01
【问题描述】:

我正在开发一个针对 .NET Framework CE 的应用程序,我们有很多通过附加数据构建的 SQL 查询。

一个例子

      string SQL="insert into ERTLISTS (ERTNUM,ERTTYPE,ERT_Status,ERT_Items,ERTTo_Check," & _
                                            "ERT_Date,ERTe_Date,ERT_ID,Location_Count,TRS_Desc,QA_Cycle," & _
                                            "Due_Date,Next_WRK_Date,User_Freq) values (" & _
                 "" & CInt(strData(0)) & "," & _
                  "'" & strData(1) & "'," & _
                   "'" & strData(2) & "'," & _
                     "" & CInt(strData(3)) & "," & _
              "" & CInt(strData(4)) & "," & _
           "#" & CDate((strData(5).Substring(4, 2) & "/" & strData(5).Substring(2, 2) & "/" & strData(5).Substring(0, 2)).ToString()) & "#," & _
              "#" & CDate((strData(6).Substring(4, 2) & "/" & 
            strData(6).Substring(2, 2) &
     "/" & strData(6).Substring(0, 2)).ToString()) & "#," & _
         "" & CInt(strData(7)) & "," & _
         "" & CInt(strData(8)) & "," & _
         "'" & strData(9) & "'," & _
         "'" & strData(10) & "'," & _
        "#" & CDate((strData(11).Substring(4, 2) 
    & "/" & strData(11).Substring(2, 2) & "/" & strData(11).Substring(0, 2)).ToString()) & "#," & _
     "#" & CDate((strData(12).Substring(4, 2) 
    & "/" & strData(12).Substring(2, 2) & "/" & strData(12).Substring(0, 2)).ToString()) & "#," & _"#" & CDate((strData(13).Substring(4, 2) & "/" 
& strData(13).Substring(2, 2) & "/" 
& strData(13).Substring(0, 2)).ToString()) & "#)"

我也知道 StringBuilder ,如果我使用 Stringuilder 会有任何性能提升吗?

提前致谢。

【问题讨论】:

  • @Steve 感谢您的评论。就我而言,我正在向字符串添加一些值。只使用一个变量。例如显示使用多个变量。 st1 += s;
  • 是否有不能使用参数化查询的原因?这样可以避免连接的需要,也可以避免其他问题,例如 SQL 注入攻击和数据中的无效字符。
  • 在这种情况下,代码可读性也是使用参数化查询的另一个好处。如果我不得不修改一些现有的代码,我不会完全兴奋,这就是我发现的。
  • 查看这个问题http://stackoverflow.com/questions/1836016/sqlserverce-problem-with-parameterized-queries-from-net中接受的答案。它显示了一个使用 SQL CE 参数化查询的示例。

标签: vb.net string .net-3.5


【解决方案1】:

String 类型是不可变的*(一旦创建,就不能 已更改)*。无法修改已创建的 字符串对象。例如,当您附加一个字符或另一个 string 到 string,每次实际上都会创建一个新的组合字符串。 StringBuilder 是可变的,当你需要修改它的时候工作得更快 内容。

string builder 类提供了一种更有效的方法来重复添加 位到一个字符串上。您为其提供初始容量(它会增长 自动,但如果增长太频繁会降低性能)。你可以 向它添加更多的字符串位,而无需创建新的开销 对象。

如果你只是在做,性能差异将太小而无法衡量 一些连接,但如果你在一个循环中,构建一个大字符串,那么 StringBuilder 有一定的优势。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 2014-06-05
    • 2011-02-15
    • 1970-01-01
    • 2020-01-02
    • 2014-11-28
    • 2010-09-22
    相关资源
    最近更新 更多