Regex sure is fast 
Btw, what Focus replied at first is also true.
Allocating an array item 50000 times versus allocating 50000 array items in one time is a huge difference.
Code:
Use Windows
Procedure Test
DWord dwBegin dwEnd
Integer i
String[] words
Move (GetTickCount()) to dwBegin
Move (ResizeArray(words,50000)) to words
Move (GetTickCount()) to dwEnd
Showln "50k at 1x " (dwEnd - dwBegin) // I got 0
Move (GetTickCount()) to dwBegin
For i from 0 to 50000
Move (ResizeArray(words,i)) to Words
Loop
Move (GetTickCount()) to dwEnd
Showln "One item 50k x " (dwEnd - dwBegin) // I got 6203 for 64 bit DF20.0
InKey FieldIndex
End_Procedure
Send Test
AFAICT it doesn't apply to StrSplitToArray as you can't pass a pre-initialised array, but the difference is certainly there.
Oh well. easy enough to test that too.
Code:
Use Windows
Procedure Test
DWord dwBegin dwEnd
String s
String[] words
#IF !@<201
Set_Argument_Size 1000000
#ENDIF
Move (GetTickCount()) to dwBegin
Move (Repeat("hello;", 50000)) to s
Move (GetTickCount()) to dwEnd
Showln "Combining " (dwEnd - dwBegin) // I got 0
Move (GetTickCount()) to dwBegin
Move (StrSplitToArray(s, ";")) to words
Move (GetTickCount()) to dwEnd
Showln "Splitting " (dwEnd - dwBegin) // I got 28859 for 64 bit.
Move (ResizeArray(words,0)) to words
Move (ResizeArray(words,50000)) to words
Move (GetTickCount()) to dwBegin
Move (StrSplitToArray(s, ";")) to words
Move (GetTickCount()) to dwEnd
Showln "Splitting preallocated " (dwEnd - dwBegin) // I got 32688 for 64 bit.
InKey FieldIndex
End_Procedure
Send Test
About 4 seconds slower ... umm... Ok.
--
Wil