02. september 2002 - 21:42Der er
13 kommentarer og 1 løsning
læsning og skrivning til txt filer via win api...
hey .. snakkede lige med en som mente at det ville værer næsten 2x så hurtigt at åbne, læse, gemme og lukke .. ved ikke lige det med at åbne og lukke dem men det med at læse og gemme hvis man brugte win api kald i stedet fir AssignFile - ReadLn - WriteLn - CloseFile ..
nu spørger jeg så er det rigti.. og hvad er api kaldene for så tester jeg det lige i mit timer program :D
Dog er fordelen ved WinAPI-kaldene så vidt jeg ved at de benytter sig af Windows' systemcache. Så hvis filen lige har været læst vil den forblive i hukommelsen et stykke tid. Tror jeg
Jeg har lige lavet et program der først henholdsvis skriver 100 Mb på med delphis rutiner og derefter skriver 100 Mb med Windows API rutinerne og foreskællen er minimal....
type TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; ProgressBar1: TProgressBar; ProgressBar2: TProgressBar; Label1: TLabel; Label2: TLabel; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var fil1 : file og byte; fil2 : integer; tmp : array of byte; Tid1,Tid2 : Double; i : integer; begin SetLength(tmp,1024*1024); fillchar(tmp[1],1024*1024,200);
Tid1 := now; AssignFile(fil1,'tmpfil1.tmp'); ReWrite(Fil1,1); for i := 1 to 100 do begin BlockWrite(Fil1,tmp[1],Length(Tmp)); ProgressBar1.Position := i; end; CloseFile(Fil1); Tid1 := now-Tid1; DeleteFile('tmpfil1.tmp');
Tid2 := now; fil2 := FileCreate('tmpfil2.tmp'); for i := 1 to 100 do begin FileWrite(Fil2,tmp[1],Length(Tmp)); ProgressBar2.Position := i; end; FileClose(Fil2); Tid2 := now-Tid2; DeleteFile('tmpfil2.tmp');
ja men mit prob er at jeg har en logfil på et sted mellem 4 og 10mb der skal læses ind og omskrives.. i et console program.. så jeg er ude på at finde den hurtigste metode til at 1 læse min logfil og 2 skrive den ommodifiserede log
så en memo kan jeg ikke bruge til meget.. men, er den FIleSTream så meget hurtigere.. eller kan det bedre betale sig at bruge de winapi kald som cms mener bliver cashed??
skal nok også lige sige så at jeg læse en linie af gangen fra min log og ligesom parser den og så går jeg videre..
Loke-liscom; vi kan nok godt blive enige om at der ikke er den storer forskel egentlig.. i det lange løb er de jo nogen lunde lige hurtige
Delphi fil rutiner 5,207 sekunder Windows Api fil rutiner 9,003 sekunder /// temmelig lang pause \\\ Delphi fil rutiner 16,844 sekunder Windows Api fil rutiner 4,787 sekunder Delphi fil rutiner 4,486 sekunder Windows Api fil rutiner 5,578 sekunder Delphi fil rutiner 6,850 sekunder Windows Api fil rutiner 4,326 sekunder Delphi fil rutiner 7,300 sekunder Windows Api fil rutiner 4,477 sekunder /// lille pause \\\ Delphi fil rutiner 10,185 sekunder Windows Api fil rutiner 13,029 sekunder Delphi fil rutiner 4,516 sekunder Windows Api fil rutiner 4,617 sekunder ///Pause på en 20 min \\\ Delphi fil rutiner 5,017 sekunder Windows Api fil rutiner 4,887 sekunder ///Resten er kørt lige efter hinanden\\\ Delphi fil rutiner 4,636 sekunder Windows Api fil rutiner 4,507 sekunder Delphi fil rutiner 4,456 sekunder Windows Api fil rutiner 4,647 sekunder Delphi fil rutiner 4,547 sekunder Windows Api fil rutiner 4,396 sekunder Delphi fil rutiner 4,406 sekunder Windows Api fil rutiner 4,557 sekunder
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.