Dynamiczny rozmiar bufora + sciaganie pliku z neta

0

witam mam kod z 4p, ktory zasysa plik przy pomocy WinInet

procedure TTd.execute;
var
  Buffer : array[1..64000] of Byte; // bufor zawierający pobrany fragment pliku
  hSession, hURL : HINTERNET;
  dwRead : DWORD; // ilość odczytanych danych
  dwSize : DWORD;  // rozmiar pliku
  F : File;
  pBuf : Pointer;
  dwBufLen : DWORD;
  dwIndex : DWORD;
  TotalRead : Integer;
begin
   FreeOnTerminate := True;

{ otwieranie połączenia }
  hSession := InternetOpen('Fast Download',
                           INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  Application.ProcessMessages;
  form1.lblProgress.Caption := 'Łączenie z serwerem...';
  //btnDownload.Enabled := False;

  try
  { otwarcie podanego adresu URL }
    hURL := InternetOpenURL(hSession, PChar(a), nil, 0, 0, 0);
    Application.ProcessMessages;
     form1.lblProgress.Caption := 'Czekanie na odpowiedź...';

    dwBufLen := 64000;
    dwIndex := 0;
    GetMem(pBuf, dwBufLen);

    { pobranie informacji na temat wielkości pliku }
    HttpQueryInfo(hURL, HTTP_QUERY_CONTENT_LENGTH,
                              pBuf, dwBufLen, dwIndex);
    dwSize := StrToInt(StrPas(pBuf));
     form1.ProgressBar.Max := (dwSize div 1024);

    FreeMem(pBuf, dwBufLen);

    try
      AssignFile(F, b);
      try
        Rewrite(F, 1);
        repeat
         // if Broken then Break;

        { pobieranie kolejnych fragmentów pliku }
          InternetReadFile(hURL, @Buffer, SizeOf(Buffer), dwRead);
          BlockWrite(F, Buffer, dwRead); // zapisanie buforu w pliku
          TotalRead := TotalRead + dwRead;

          Application.ProcessMessages;
          { wyświetlenie postępu }
           form1.lblProgress.Caption := 'Ściągam ' + IntToStr(TotalRead div 1024) + ' kB z ' + IntToStr(dwSize div 1024) + ' kB';
           form1.ProgressBar.Position := TotalRead div 1024;
        until dwRead = 0;
      finally
        CloseFile(F);
      end;
    finally
      InternetCloseHandle(hSession);
    end;
  finally
    InternetCloseHandle(hURL);
  //  btnDownload.Enabled := False;
  end;
   form1.lblProgress.Caption := 'Pobrano';


end;

Problem polega na tym, że jest do dyspozycji łącze 100MB (serwer dedykowany), predkosc zasysania pliku to od 4 do 8MB.
Maksymalna wartosc którą moge ustawić dla wielkości bufora, tak że program sie nie wykrzaczał, to 1024000 - czyli 1MB. Program działa, ale pobiera TYLKO z prędkością 1MB/s :/ bo jest po prostu marnotrawieniem łącza :/

Tak więc moje pytanie : czy da sie jakoś dynamicznie ustawiać wielkośc bufora ? (tylko nie piszcie prosze zebym uzyl SetLength - bo tego sie domyslam - tylko ne wiem jak to zrobic ;/)

0

kurde, nikt nie ma pomyslu jak by to mozna zrealizowac ??

1 użytkowników online, w tym zalogowanych: 0, gości: 1