Visual Basic, VB .NET, ASP, Active X, Access, SQL Server

VB: concatenando strings mais rápido com o comando Mid$

 

Concatenação de strings está entre as operações mais lentas que você pode fazer na memória com o VB. Programadores avançados sabem que o problema não está na concatenação em si, mas no tempo que o VB perde alocando memória para a nova string mais longa que está sendo formada e liberando o bloco original de memória para a string anterior. Se você puder reduzir esta atividade de alocação e liberação de memória, ficará surpreso com a rapidez do seu novo código.

O operador "&" é bastante lento, principalmente com grandes strings. Quando você tem que adicionar repetidamente conjuntos de caracteres à mesma variável, você pode aumentar a velocidade do seu código usando um truque simples baseado no comando Mid$. A idéia é que você pré-aloca um buffer grande o suficiente para acomodar o resultado da operação. Eis aqui um exemplo desta técnica.

Suponha que você queira criar uma string pela concatenação dos primeiros 10000 inteiros, exemplo: "1 2 3 4 5 ... 99999 10000". O modo comum e fácil de fazer é este:

res = ""
For i = 1 to 10000: res = res & Str(i): Next

O problema com a abordagem padrão é que a variável res é realocada 10000 vezes. Este é um modo melhor de obter o mesmo resultado:

Dim res As String
Dim i As Long
Dim index As Long, length as Long

' prepara um buffer longo o suficiente
res = Space(90000)
' index aponta para onde você quer inserir a string
index = 1

' vamos lá
For i = 1 to 10000
    substr = Str(i)
    length = Len(substr)
    ' introduz a string dentro da variável res
    Mid$(res, index, length) = substr
    ' avança o index
    index = index + length
Next
' elimina caracteres extra
res = Left$(res, index - 1)

O código comum leva 2.2 segundos no meu computador de 333 MHz, enquanto o modo rápido leva apenas 0.08 segundos, portanto, é  25+ vezes mais rápido.