Как уже отмечалось, каждая конкатенация в VB выделит новую строку, а затем скопировать данные снова и затем отмены размещения оригинала, как только это возможно. В цикле это может вызвать проблемы.
Чтобы обойти эту проблему можно создать простой класс StringBuilder, как этот:
Option Explicit
Private data As String
Private allocLen As Long
Private currentPos As Long
Public Function Text() As String
Text = Left(data, currentPos)
End Function
Public Function Length() As Long
Length = currentPos
End Function
Public Sub Add(s As String)
Dim newLen As Long
newLen = Len(s)
If ((currentPos + newLen) > allocLen) Then
data = data & Space((currentPos + newLen))
allocLen = Len(data)
End If
Mid(data, currentPos + 1, newLen) = s
currentPos = currentPos + newLen
End Sub
Private Sub Class_Initialize()
data = Space(10240)
allocLen = Len(data)
currentPos = 1
End Sub
Этот класс позволит свести к минимуму количество строк распределения, заставляя строку быть построен с пробелами в нем, а затем перезаписывания при необходимости. Он переназначает примерно вдвое больше его размера, когда обнаруживает, что он не имеет достаточного пространства, предварительно инициализированного. Метод Text вернет часть используемой строки.
Не могли бы вы вставить код вокруг строки, которая возвращает ошибку? – Robit 2008-09-18 16:05:00
Значения соответствующих переменных также могут быть полезны – Robit 2008-09-18 16:06:03