LINUX.ORG.RU

История изменений

Исправление saahriktu, (текущая версия) :

А ты уверен в TFPCustomHTTPClient?

Да.

чтение побайтово помимо этого приведёт к миллиардам переключений контекста, отсюда и тормоза в первую очередь

Зачем? Вы что, думаете, что при побайтном чтении после каждого нового символа вызывают realloc()? В C, например, достаточно прочитать один раз в никуда, подсчитав кол-во байтов до EOF, затем сделать rewind(), выделить один раз память, а затем прочитать в этот только что выделенный буфер. В других языках тоже наверняка есть подобные методы.

Ты можешь изменять их размер и градацию, как в си?

Да, размер строк в Паскале можно менять. Однако, обычно это всё не так уж и актуально. Юзер может просто манипулировать строками. В т.ч. читать файлы строками.

Например, возьмём файл

111
2222
33333
Вот такой вот код:
program filetest2;
var
        fptr: text;
        s: UnicodeString;
        filebuf: UnicodeString = '';
begin
        assign(fptr,'test1.txt');
        reset(fptr);
        while not eof(fptr) do
        begin
                readln(fptr, s);
                filebuf := filebuf + s;
        end;
        close(fptr);
        writeln(filebuf);
end.
выведет
111222233333
А теперь возьмём текстовый файл на 37 Мб. Да, обрабатывается относительно долго (полминуты), но работает. При этом вручную размер строк нигде не меняется. Сплошная автоматика. Итоговый размер строки у меня получился 37451647.

Исходная версия saahriktu, :

А ты уверен в TFPCustomHTTPClient?

Да.

чтение побайтово помимо этого приведёт к миллиардам переключений контекста, отсюда и тормоза в первую очередь

Зачем? Вы что, думаете, что при побайтном чтении после каждого нового символа вызывают realloc()? В C, например, достаточно прочитать один раз в никуда, подсчитав кол-во байтов до EOF, затем сделать rewind(), выделить один раз память, а затем прочитать в этот только что выделенный буфер. В других языках тоже наверняка есть подобные методы.

Ты можешь изменять их размер и градацию, как в си?

Да, размер строк в Паскале можно менять. Однако, обычно это всё не так уж и актуально. Юзер может просто манипулировать строками. В т.ч. читать файлы строками.

Например, возьмём файл

111
2222
33333
Вот такой вот код:
program filetest2;
var
        fptr: text;
        s: UnicodeString;
        filebuf: UnicodeString = '';
begin
        assign(fptr,'test1.txt');
        reset(fptr);
        while not eof(fptr) do
        begin
                readln(fptr, s);
                filebuf := filebuf + s;
        end;
        close(fptr);
        writeln(filebuf);
end.
Он выведет
111222233333
А теперь возьмём текстовый файл на 37 Мб. Да, обрабатывается относительно долго (полминуты), но работает. При этом вручную размер строк нигде не меняется. Сплошная автоматика. Итоговый размер строки у меня получился 37451647.