In diesem und im englischen Forum gibt es bereits einige Codes, die Stringverknüpfungen beschleunigen.
Hier mal eine etwas andere Art eines Stringbuilders, welcher SQLite-Funktionalitäten verwendet.
Je höher die Anzahl der Durchläufe (bei ab einer Anzahl > 500) und je länger die zu verknüpfenden Zeichenketten, desto größer ist der Geschwindigkeits-Gewinn.
Code: Alles auswählen
EnableExplicit
Procedure SbInit()
UseSQLiteDatabase()
Protected DB
DB = OpenDatabase(#PB_Any, ":memory:", "", "", #PB_Database_SQLite)
DatabaseUpdate(DB, "Create Table Strings (String TEXT)")
ProcedureReturn DB
EndProcedure
Procedure SbAppend(DB, String.s)
SetDatabaseString(DB, 0, String)
DatabaseUpdate(DB, "Insert Into Strings (String) Values (?)")
EndProcedure
Procedure.s SbToString(DB, Delimiter.s = "")
Protected ReturnValue.s
DatabaseQuery(DB, "Select Group_Concat(String, '" + Delimiter + "') From Strings")
NextDatabaseRow(DB)
ReturnValue = GetDatabaseString(DB, 0)
FinishDatabaseQuery(DB)
ProcedureReturn ReturnValue
EndProcedure
Procedure.s SbClear(DB)
DatabaseUpdate(DB, "Delete From Strings")
EndProcedure
Procedure.s SbExit(DB)
CloseDatabase(DB)
EndProcedure
; Test:
#Anzahl = 5000
Define SB, Counter
Define Z1, Z2, L1
Z1=ElapsedMilliseconds()
SB = SbInit()
For Counter = 1 To #Anzahl
SbAppend(SB, "Hello PureBasic!")
Next
L1 = Len(SbToString(SB))
SbClear(SB)
SbExit(SB)
Z2=ElapsedMilliseconds()
; ------
Define Z3, Z4, L2
Define SBString.s
Z3=ElapsedMilliseconds()
SBString = ""
For Counter = 1 To #Anzahl
SBString + "Hello PureBasic!"
Next
L2 = Len(SBString)
SBString = ""
Z4=ElapsedMilliseconds()
MessageRequester("Result",
"DB: " + Str(Z2-Z1) + " (" + Str(L1) + ")" + #CRLF$ +
"PB: " + Str(Z4-Z3) + " (" + Str(L2) + ")")
Optimierungen, Modularisierungen, etc. könnt Ihr gerne selber durchführen.

Grüße ... Peter