Hallo,
ich versuche grad ein Programm von mir zu optimieren und teste die laufzeiten von meinen einzelnen Funktionen indem ich jede ein paar mal aufrufe und die gesamtzeit ausgeben lasse. Also ich hab das Problem das die beiden Funktionen einzeln aufgerufen ziemlich schnell (ca. 500 ms für 1000 aufrufe abgearbeitet werden). Allerdings wenn ich beide hintereinandere aufrufe wird die laufzeit nicht nur verdoppelt, sondern fast verhundertfacht:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| bitmap:=tbitmap.create;
start:=now; for i:=0 to 1000 do begin bildschirmfoto(bitmap); auswertung(Bitmap); end;
button1.caption:=inttostr(millisecondsbetween(now,start)); bitmap.free; |
die Prozedur bildschirmfoto soll nur ein Bildschirmfoto in einer bestimmten größe liefern:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| procedure TForm1.bildschirmfoto(var result:tbitmap); var rect1,rect2:trect; cv:tcanvas; r : TRect; bitmap2:tbitmap; begin cv:=TCanvas.Create; cv.Handle:=GetWindowDC(GetDesktopWindow); r:=Rect(0,0,Screen.Width,Screen.Height); result.Width:=Screen.Width; result.Height:=Screen.Height;
hoch:=302; breit:=296;
rect1:=rect(0,0,breit,hoch); rect2:=rect(0,0,rect1.right-rect1.left,rect1.Bottom-rect1.Top);
result.Canvas.CopyRect(rect2,cv,rect1);
ReleaseDC(0,cv.Handle); cv.Free;
end; |
Und bei auswertung wird dieses Bild dann ausgewertet, mit einem Scanlinebefehl und dann einigen inc(zeiger1,...)
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| function tform1.auswertung(var bitmap:tbitmap):boolean; var oben:integer; zeiger1: pcolor; begin if bitmap.PixelFormat <> pf32bit then bitmap.PixelFormat := pf32bit;
if (Bitmap.Width<=0) or (Bitmap.Height<=0) then exit;
oben:=15; zeiger1:=bitmap.ScanLine[oben];
...
end; |
Also nochmal: einzeln laufen die Prozeduren extrem schnell nur wenn ich sie halt hintereinander (mit dem gleichen Bitmap) aufrufe, wirds extrem langsam.
Kann mir das jemand erklären und evt. einen Verbesserunsgvorschlag machen?!
Vielen Dank.