This week I found a new interesting piece of code. Someone wanted to initialize a string with a special length of the same char.
procedure TMyClass.Init;
const
cBufferLength = 100;
var
I: Integer;
begin
...
FBuffer := ''
for I := 1 to cBufferLength do
FBuffer := FBuffer + ' ';
...
end;
Come on guys, this is complete rubbish! In short words, a string is a record that allocs as much memory as the string needs. With this for loop the poor memory manager has to alloc a piece of memory 100 times! As you can image this is not fast and will also turn your memory into small pieces.
procedure TMyClass.Init;
const
cBufferLength = 100;
var
I: Integer;
begin
...
SetFBuffer := ''
for I := 1 to cBufferLength do
FBuffer := FBuffer + ' ';
...
end;
A better solution would be to set the length of the string and then to set all chars.
const
cBufferLength = 100;
var
I: Integer;
begin
...
SetLength(FBuffer, cBufferLength);
for I := 1 to cBufferLength do
FBuffer[I] := ' ';
...
end;
Or simply call the StringOfChar function.
const
cBufferLength = 100;
var
I: Integer;
begin
...
FBuffer := StringOfChar(' ', cBufferLength)
...
end;



