Как ускорить работу"универсальной" функции getFileSize?

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Как ускорить работу"универсальной" функции getFileSize?

Сообщение Alex2013 » 19.03.2025 14:31:08

В общем написал я такую "образину" для получения размера файла, которая работает и сетью (http/https) и с локальными фалами. И все бы хорошо но "сетевой вариант" работает крайне медленно (для сравнительно небольших файлов почти нет разницы между полной загрузкой и запросом размера что по идее полный нонсенс так как это что-то вроде пинга и реальные данные не загружаются от слова совсем )

Код: Выделить всё
Function getFileSize( FPath:String):Int64;
var
  sr: TSearchRec;
  S: string;
  HTTPClient : TFPHttpClient;
  ST:TStringList;
begin
Result := -1;

If pos('http',FPath)=1 then begin

HTTPClient := TFPHttpClient.Create(nil);
     ST:=TStringList.Create;

     try
   HTTPClient.Head(FPath,ST);

     except
       HTTPClient.Free;
    St.Free;
    exit;
     end;
if HTTPClient.ResponseStatusText='' then begin
   S:= HTTPClient.GetHeader(ST,'Content-Length');
   If S<>'' then Result := S.ToInt64;
  end;
    HTTPClient.Free;
   St.Free;
end else
begin
try
if FindFirst(FPath , faAnyFile, sr) = 0 then
begin
Result :=  Sr.Size;
end
finally
FindClose(sr);
   end
end
end;


Последний раз редактировалось Alex2013 19.03.2025 14:44:21, всего редактировалось 1 раз.
Alex2013
долгожитель
 
Сообщения: 3117
Зарегистрирован: 03.04.2013 11:59:44

Re: Как ускорить работу"универсальной" функции getFileSize?

Сообщение v-t-l » 19.03.2025 14:38:55

Возможно [url]https://ru.wikipedia.org/wiki/Постоянное_HTTP-соединение[/url] поможет, но может зависеть и от сервера.
v-t-l
энтузиаст
 
Сообщения: 740
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Как ускорить работу"универсальной" функции getFileSize?

Сообщение Alex2013 » 19.03.2025 14:50:44

v-t-l писал(а):Возможно [url]https://ru.wikipedia.org/wiki/Постоянное_HTTP-соединение[/url] поможет, но может зависеть и от сервера.

Хм ! Спасибо, попробую.

Добавлено спустя 22 минуты 9 секунд:
Вроде помогло
Код: Выделить всё
...
   HTTPClient.AddHeader(ST,'Connection', 'Keep-Alive');
   HTTPClient.Head(FPath,ST);
...

Список в 30 URL обработало за 8 секунд вместо 27 секунд. :idea:
Alex2013
долгожитель
 
Сообщения: 3117
Зарегистрирован: 03.04.2013 11:59:44


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 11

Рейтинг@Mail.ru