Einzelnen Beitrag anzeigen

busybyte

Registriert seit: 15. Sep 2006
165 Beiträge
 
#4

Re: Skinroutine schneller machen

  Alt 19. Feb 2008, 17:32
Du verwendest ein echtes Inifile im Textformat,das ist Deine erste Bremse und nur für kleine Dateien geeignet.
Speichere und lade mit einem Stream,das ist zwar nicht so übersichtlich, aber um einiges schneller.
Ansonsten bräuchten wir wohl etwas mehr Kot.

Delphi-Quellcode:
unit MyStream_U;
interface

Uses Classes; //TStream

Procedure WriteInt(Stream:TStream;I:Longint);
Procedure ReadInt(Stream:TStream;Var I:Longint);
Procedure WriteStr(Stream:TStream;S:String);
Procedure ReadStr(Stream:TStream;Var S:String);

implementation
//StreamPocedures
Procedure WriteStr(Stream:TStream;S:String);
Var Len:Longint;
begin
Len:=Length(S);
Stream.Write(Len,SizeOf(Len));
Stream.Write(PChar(S)^,Len);
end;

Procedure WriteInt(Stream:TStream;I:Longint);
begin
Stream.Write(I,SizeOf(I));
end;


Procedure ReadStr(Stream:TStream;Var S:String);
Var Len:Longint;
begin
Stream.Read(Len,Sizeof(Len));
Setlength(S,Len);
Stream.Read(PChar(S)^,Len);
end;

Procedure ReadInt(Stream:TStream;Var I:Longint);
begin
 Stream.Read(I,SizeOf(I));
end;

///// Stream Ende

end.
Delphi-Quellcode:
Uses MyStream_U; //Edit

Function MySave(Filename_:String):Boolean;
Var
Stream:TStream;
Len:integer;
cnt1:integer;
begin
result:=false;
while Filename_='do exit;

with GLAudioForm do
 Try
 Stream:=TFilestream.Create(Filename_,fmcreate);

 //Audiokat - Beispiel nicht copy/paste fähig
 Len:=Length(AudioKat);
 WriteInt(Stream,Len);
  for cnt1 := 0 to Len- 1 do
  begin
  TestS:=AudioKat[cnt1].AKFilename;
  writeStr(Stream,AudioKat[cnt1].AKFilename);
  end;
.
.
.
Delphi-Quellcode:
Uses MyStream_U; //Edit

Function MyLoad(Filename_:String):Boolean;
Var
Stream:TStream;
Len:integer;
cnt1:integer;
SData:String;
//f: PChar;

begin
Result:=False;
Len:=0;
 while not Fileexists(Filename_) do
  begin
  exit;
  end;

Stream:=TFileStream.Create(Filename_,fmOpenread);
with GLAudioForm do
Try
//AudioKat
ReadInt(Stream,Len);
Setlength(AudioKat,Len);
 for cnt1 := 0 to Len- 1 do
  begin
  ReadStr(Stream,SData);
  Add_to_AudioKat(SData,cnt1);
  end;
.
.
.
I love DiscCat
  Mit Zitat antworten Zitat