Листинг 135 (к совету 135)


Private Sub Form_Load()
  ' номер тестируемого варианта
  iVar = 1
  Call BuildBuffer(iVar)
End Sub

Public Sub BuildBuffer(iVar As Integer)
  Dim strBuffer As String, strTemp As String, strNew As String
  Dim l As Long, lCount As Long
  Dim lCur As Long, lEnd As Long, lNew As Long
  Dim dStart As Date
  '
  ' тестирование трех вариантов
  ' формирование строковой переменной
  lCount = 200000    ' число циклов
  strNew = "Новая строка /"  ' добавляемая строка
  dStart = Now    ' точка отсчета времени
  ' создание буфера
  Select Case iVar
    Case 1  ' вариант 1
      For l = 1 To lCount
        strBuffer = strBuffer & strNew
      Next
    Case 2  ' вариант 2
      For l = 1 To lCount
        strTemp = strTemp & strNew
        If l Mod 100 = 0 Then
          strBuffer = strBuffer & strTemp
          strTemp = ""
        End If
      Next
      strBuffer = strBuffer & strTemp
    Case 3  ' вариант 3
      strBuffer = Space(1)  ' начальный буфер
      lCur = 1        ' текущий указатель в буфере
      For l = 1 To lCount lNew = Len(strNew)
        While lCur + lNew - 1 > Len(strBuffer)
          ' удвоение длины буфера
          strBuffer = strBuffer & strBuffer
        Wend
        Mid$(strBuffer, lCur) = strNew
        lCur = lCur + lNew
      Next
      ' формирование окончательного буфера
      strBuffer = Left$(strBuffer, lCur - 1)
  End Select
  ' вывод информации о затраченном времени
  MsgBox "Вариант" & Str(iVar) & _
    " Количество циклов -"  & Str(lCount) & vbCrLf _
    & "Количество затраченных секунд = " & _
    DateDiff("s", dStart, Now)
End Sub

В начало статьи