zub писал(а):Дайте угадаю, код изобилует конструкциями вида
s:=s+какаятострока[i]
нет не угадали...
там разделителем были двойные символы... это тоже замедляет... сейчас их заменил на единичные, тестирую..
код выглядит так:
arrStr := UTF8Explode('`',sReturnText);
arrData := UTF8Explode('|' , arrStr[j]');
Добавлено спустя 5 минут 56 секунд:zub писал(а):надо позаботится чтоб небыло лишних выделенийперераспределений памяти
Уверены в этом??? Там 1 000 000... вообще alexs правильно сказал про move... я им давно не пользовался, т.к. на другом языке делал.
А например при обработке 3d массивов, используют только move... соответственно alexs правильно сказал... Я так думаю...
Разве нет?
.
Добавлено спустя 5 минут 3 секунды:Я ещё нашёл вот такую функцию...
ExtractWord (это стандартный explode lazarusa)
Она быстро работает??? (думаю, что медленно, т.к. она вначале для каждой ищет её начало, а не делит все подряд...)
Добавлено спустя 1 минуту 34 секунды:Вот её код... там как раз Move используют...
- Код: Выделить всё
function ExtractWordPos(N: Integer; const S: string; const WordDelims: TSysCharSet; var Pos: Integer): string;
var
i,j,l: Integer;
begin
j:=0;
i:=WordPosition(N, S, WordDelims);
Pos:=i;
if (i<>0) then
begin
j:=i;
l:=Length(S);
while (j<=L) and not (S[j] in WordDelims) do
inc(j);
end;
SetLength(Result,j-i);
If ((j-i)>0) then
Move(S[i],Result[1],j-i);
end;
Добавлено спустя 23 минуты 21 секунду:Но вот что странно...
PHP даже с двойными символами разделения - разбивает быстро...