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
                        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
                        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
                        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.