浅谈VB6字符串拼接效率

日期:2019年11月2日
作者:Commas
注释:字符串拼接是一个常规的操作,随着字符串不断增大,字符串拼接耗时也越来越长,那么提升字符串拼接效率的话题就是一个十分值得探讨的话题,接下来我们用数据说话,浅谈一下VB6提升字符串拼接效率的问题吧。


目录

文章目录

  • 一、借数据说话
  • 二、写源码参考


一、借数据说话

序号 字符串拼接方式 4*10^6长度字符串耗时 4*10^5长度字符串耗时 4*10^4长度字符串耗时
1 直接拼接& 2950s 17s 0s
2 直接拼接+ 2942s 17s 0s
3 数组拼接Join <1s 0s 0s

备注:以上测试时间精确度为秒级

从上表中,我们可以得出以下结论:

  • 对于大字符串处理,字符串数组拼接速度远远远大于字符串直接拼接速度;
  • 对于小字符串处理,三种拼接方式在耗时上基本持平;

分析: 字符串直接拼接("&"、"+"),在小字符串处理(2^16 个字符以内)中,是属于定长字符串拼接,只会在声明字符串变量的时候申请一次内存空间,不会有其他的额外资源消耗。但是随着处理的字符串不断增大,就会由定长字符串转为变长字符串,那么就会每次执行字符串拼接操作的时候重新申请内存空间,这种资源消耗叠加效应等弊端就逐渐暴露出来,而字符串数组拼接(Join(SourceArray, [Delimiter])),开始就申明数组,确定了栈内存大小,数组中每个元素赋值就可以控制在一个小字符串的赋值操作,所以这种操作效率还是比较快速的;

'数组转为字符串的函数:
Function Join(SourceArray, [Delimiter]) As String
    VBA.Strings 的成员
    Join array elements into a string

知识加油站:
“VB6 String 数据类型” 有两种:变长与定长的字符串。
1、变长字符串最多可包含大约 20 亿 ( 2^31)个字符。
2、定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。

二、写源码参考

Option Explicit

Private Sub Form_Load()
On Error Resume Next
    Dim t1 As Date, t2 As Date
    Dim i As Long, strTemp As String, aryRow() As String
    
    Dim strX As String: strX = "ABCD"
    Dim lngMax As Long: lngMax = 999999'99999'9999
    
    '(1)数组字符串连接
    t1 = Now()
    ReDim aryRow(lngMax)
    For i = 0 To lngMax
        'DoEvents '为了防止卡死,这样会多花一秒时间
        aryRow(i) = strX
    Next i
    strTemp = Join(aryRow, "")
    t2 = Now()
    'Debug.Print strTemp
    Debug.Print "字符串长度" & Len(strTemp) & ",耗时1=" & Abs(DateDiff("s", t1, t2))
    
    Debug.Print "华丽的分隔线----------"
    
    '(2)字符串直接拼接
    '(2-1)字符串直接拼接(+)
    strTemp = ""
    t1 = Now()
    For i = 0 To lngMax
        DoEvents '为了防止卡死,这样会多花一秒时间
        'strTemp = strTemp & strX
        strTemp = strTemp + strX
    Next i
    t2 = Now()
    'Debug.Print strTemp
    Debug.Print "字符串长度" & Len(strTemp) & ",耗时2=" & Abs(DateDiff("s", t1, t2))
    
    Debug.Print "华丽的分隔线----------"
    
    '(2-3)字符串直接拼接(&)
    strTemp = ""
    t1 = Now()
    For i = 0 To lngMax
        DoEvents '为了防止卡死,这样会多花一秒时间
        strTemp = strTemp & strX
    Next i
    t2 = Now()
    'Debug.Print strTemp
    Debug.Print "字符串长度" & Len(strTemp) & ",耗时3=" & Abs(DateDiff("s", t1, t2))
End Sub

控制台输出结果:
字符串长度4000000,耗时1=0
华丽的分隔线----------
字符串长度4000000,耗时2=2942
华丽的分隔线----------
字符串长度4000000,耗时3=2950

本文参考:Microsoft Repository 2.0


版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/102865760

你可能感兴趣的:(VB6,VB6字符串拼接,VB6字符串连接,VB6字符串相加,字符串拼接效率,提升字符串拼接效率)