AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi indy stream (Dateitransfer) wird immer langsamer..
Thema durchsuchen
Ansicht
Themen-Optionen

indy stream (Dateitransfer) wird immer langsamer..

Ein Thema von supermuckl · begonnen am 10. Dez 2003 · letzter Beitrag vom 11. Dez 2003
Antwort Antwort
supermuckl

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

indy stream (Dateitransfer) wird immer langsamer..

  Alt 10. Dez 2003, 23: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
Kamil

Registriert seit: 16. Aug 2002
178 Beiträge
 
#2

Re: indy stream (Dateitransfer) wird immer langsamer..

  Alt 11. Dez 2003, 10:13
versuchs mal mit OpenWriteBuffer(8*1024).
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: indy stream (Dateitransfer) wird immer langsamer..

  Alt 11. Dez 2003, 11:40
Hi,

mit dem Problem hatte ich auch zu kämpfen !
Der Grund das die Übertragung immer langsamer wird liegt daran, das Du über den WriteBuffer sendest und der WriteBuffer versucht entsprechend Speicher zu allocieren. Ab 30 - 40 MB wird dann angefangen auf der Festplatte zu swappen um den Speicher zu allocieren und über 80 MB ist das senden dann nicht mehr möglich, weil es dann eine Buffer Exception auftritt.

Es bleibt also gar nichts anderes übring als Dateien mit einer Grösse über ca. 20 MB aus Performance Gründen zu splitten.
Was aber ganz und gar nicht zu Lasten der Geschwindigkeit geht, was meine eigenen Tests bewiesen haben.

Wen Du Hilfe bei der Realisierung des Splitten brauchst einfach melden.

Gruß DataCool
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
supermuckl

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

Re: indy stream (Dateitransfer) wird immer langsamer..

  Alt 11. Dez 2003, 12:39
dein source mit dem splitten hab ich auch.. aber wollte erstmal so testen ob das net auch ohne geht
wenn ich das richtig sehe is nemlich dann das ganze zu übertragende file im ram mit deiner methode ?!
oder net? hab nur mal überflogen deinen code

übrigends frag ich mich immernoch wieso das über internet nich richtig übertragen kann
liegt das am gleichen problem ? buffer zu klein usw ?

ich werde mal das mit dem
OpenWriteBuffer(8*1024).
testen..
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Benutzerbild von DataCool
DataCool

Registriert seit: 10. Feb 2003
Ort: Lingen
909 Beiträge
 
Delphi 10.3 Rio
 
#5

Re: indy stream (Dateitransfer) wird immer langsamer..

  Alt 11. Dez 2003, 12:47
Hi,

das Beispiel was Du von mir hast ist absolut alt, ich habe jetzt die Aufsplittung geändert, so das immer nur ein Paket was verschickt werden soll ich Ram gehalten Wird. Sprich verschickst Du 20 KB Pakte wird immer 20 KB über TMemoryStream im RAM gehalten, nimmst Du 1 MB Pakete dann halt ein ! MB im Ram.

Gruß Data
Der Horizont vieler Menschen ist ein Kreis mit Radius Null, und das nennen sie ihren Standpunkt.
  Mit Zitat antworten Zitat
supermuckl

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

Re: indy stream (Dateitransfer) wird immer langsamer..

  Alt 11. Dez 2003, 12:57
yeah
ok dann isses geil *g*
wo haste das neue? (weis nimmer wo ich das her hab)

ich geh mal schaffen.. wenn ich wieder da bin bau ich das mal ein dann :>
Das echte Leben ist was für Leute...
... die im Internet keine Freunde finden!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz