Einzelnen Beitrag anzeigen

supermuckl

Registriert seit: 1. Feb 2003
1.340 Beiträge
 
FreePascal / Lazarus
 
#1

indy stream (Dateitransfer) wird immer langsamer..

  Alt 11. Dez 2003, 00:37
hab folgendes problem
hab indy tcp client und server eingesetzt ( neuste version )
und damit will ich dateien transferieren

wenn ich das nun im lan mache kann ich zwar fehlerfrei transferieren aber:
1. transfer wird nach start immer langsamer bis etwa < 200 kbs @ lan !
2. client braucht knappe 80-90% CPU wärend dem transfer
3. client hat ca 40 - 50 MB an größe im ram wärend dem transferieren ( danach nimmer )
server hat immer 1-4% CPU auslastung und normale größe im RAM ( 4-5MB )

wenn ich übers internet transferiere hab ich noch folgendes problem dazu:
1. z.b. eine 30mb datei wird in 1min übertragen ( hab normales DSL )
und 2. datei ist dann aufm zielrechner 30mb groß, is aber CRC mäßig kaputt ( streaming funzt wohl net richtig )
aber im lan is CRC ok nach dem transferieren !!

client code:
Delphi-Quellcode:

    fs := TFileStream.Create(uploadfile, fmOpenRead or fmShareDenyWrite); //Datei in FileStream einlesen
        form1.filebar.Max := fs.Size;
        form1.Label12.Caption := inttostr(fs.Size);
        form1.filebar.Position := 0;
    try
    form1.client.OpenWriteBuffer;

    form1.timer1.enabled := true;
        try

        form1.client.WriteStream(fs,true,true);
        form1.client.CloseWriteBuffer;
        except
        form1.client.CancelWriteBuffer;
        end;
       finally
       form1.timer1.enabled := false;
       fs.free;
       end;

      form1.filebar.Position := 0;
     form1.Label12.Caption := '--';
     form1.Label10.Caption := '--';
     form1.Label14.Caption := '--';
     uploadoldstreampos := 0;
tcpclient einstellungen:
receive/send buffer: 32768 ( schon mehr und weniger getestet.. hat sich nix geändert )
ascii filter: false
maxlinelenght: 16384
maxlineaction: maException ( wird nich ausgelöst )

server code:

Delphi-Quellcode:

if (cmd = 'uplo') then begin
if fileexists(Tfilelistbox(actclient.fileb).Directory+'\'+data) then begin
  athread.Connection.WriteLn('uploEXS');

end else begin
  athread.Connection.WriteLn('uploOK');
   fs := TFileStream.Create(Tfilelistbox(actclient.fileb).Directory+'\'+data, fmCreate or fmShareExclusive);
    with AThread.Connection do begin
    try
      SizeOfIncomingStream := ReadInteger; //Größe des Streams empfangen
      ReadStream(fs, SizeOfIncomingStream); //und übergeben
    finally
      fs.Free;
    end;
end;

end;


end; // upload
die progressbar is übrigends schön am worken einfach alle paar sekunden fs.position auslesen
( hab ich auch schon weggelassen aber hat nix ausgemacht )

hat mir da einer ne idee ?
will jetzt net grad das mit dem filesplitten machen.. muss doch so auch gehen ?!
oder kann ich auch alternativ per writeln die ganze datei rüberbeamen bis ende erreicht usw ? oder is das noch schlechter wegen speed
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat