Well, first I tried this
+ Code Snippetfunction BuildString1(Ch as string, Size as integer)
local Count as integer
Ch = left$(Ch, 1)
if Ch = " " then exitfunction space$(Size)
Count=1
while (Count+Count) < Size
Ch = Ch + Ch
Count = Count+Count
endwhile
Ch = left$(Ch, Size - Count) + Ch
endfunction Ch
Result? Abysmal speed

Next, I tried to see what effect the windows message checking had on the speed by changing the while loop into a for loop.
+ Code Snippetfunction BuildString2(Ch as string, Size as integer)
local Count as integer
Ch = left$(Ch, 1)
if Ch = " " then exitfunction space$(Size)
for Count=1 to Size step Count
Ch = Ch + Ch
next Count
Ch = left$(Ch, Size - (Count/2) ) + Ch
endfunction Ch
Then I decided to skip all that crap ...
+ Code Snippetfunction BuildString3(Ch as string, Size as integer)
local c as integer
C = asc( Ch )
Ch = space$(Size)
fill memory get string ptr(Ch), C, Size
endfunction Ch
Build a string the fast way (using space$) and then blat the right characters over the top.
The timing results on my PC for building 1000 strings of 100000 characters in length ...
1 - 6310 ms
2 - 5167 ms
3 - 931 ms
[EDIT]The last one needs my Utility plug-in[/EDIT]