Einzelnen Beitrag anzeigen

Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#3

Re: MemoryStream Bearbeitung optimieren

  Alt 18. Jun 2006, 12:20
Danke für die schnelle Antwort! Kann es dann an der Funktion TMemorystream.CopyFrom liegen? Sollte man große Memorystreams besser nicht kopieren?

Ich glaube ich füge besser mal etwas Code dazu:

Delphi-Quellcode:

//Es geht los mit:

stream2:=TMemorystream.Create;
stream2.LoadFromFile(edit1.text);


//Als nächstes wird mein Datentyp zusammengebaut:
function Packagebuilder(packagetype:TMEINPACKETTYP;stream2:TMemorystream;str:,additional:string):TMEINPACKET;

pack.packagetype:=packagetype;
pack.data:=stream2; //hier wird also der oben erzeugte stream2 in meinen Datentyp eingebaut
pack.additional:=additional;
pack.str:=str;
result:=pack;
end;


//Nun wollen wir den Datentyp per Indy verschicken und bauen dafür einen Stream der per Indy
//verschickt werden kann: (wir rufen also SendPackage mit dem Argument pack von oben auf)

procedure SendPackage(pack:TMEINPACKET;Host:String);

var stream : TMemoryStream; inttype,len:integer;
begin

stream := TMemorystream.Create;

//Schreibt Typ des Packages in den Stream:
inttype:=packagetypetoint(pack.packagetype);
stream.Write( inttype, SizeOf( inttype ) );

//Schreibt Inhalt der String Pointer in Filestream mit Längenangabe
len := Length( pack.str );
stream.Write(len, SizeOf(len) );
stream.Write( PChar(pack.str)^, len );

len := Length( pack.additional );
stream.Write(len, SizeOf(len) );
stream.Write( PChar(pack.additional)^, len );

//Schreibt Data Stream in den zu versendenden Stream
stream.Position:=stream.Size;
stream.CopyFrom(pack.data,0);

//Verschickt den Stream per Indy
sendstream(stream,Host);

end;
Kann mir jemand sagen was hier so zeitraubend ist?
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat