Szybkość procedury

0

Witam
Mam problem z szybkością wykonania pewnej procedury która sprawdza z 3600 pozycji i pokazuje 192 shapów do pokazania mapy.
Czas tej procedury rośnie za każdym jej wywołaniem. Jest jakiś sposób by wykonywała się szybciej i bez strat czasu?

//> 

  Application.ProcessMessages;
  for F := 6 downto -6 do begin
  ReadTiles(F);
  end;
//<<//Wywołanie

Procedure ReadMap(YY:Integer);
var
T:Rels;
P:TPlayer;
i,l,y,h,g : Integer;
begin
l := Loc.getTileSize(P.Z);
T := P.TileRel;
y := YY ;
i := 8;
h := 0;
g := 0;
if (T.Y - YY < 5)  Then
y := T.Y - 1 - 1 - (T.Y - YY);
if (T.Y - YY > 1)  Then
y := T.Y + 1  + 2 - (T.Y - YY);
repeat
if (Loc.Rel_X(l) = T.X - i + 3) and (Loc.Rel_Y(l) = T.Y - Y) and (Loc.Rel_Z(l) = T.Z) then begin
ShowShapes(l,T.X - i + 3 ,T.Y - Y,G,-YY,clwhite);
Dec(i);
Inc(G);
end;

if (Loc.Rel_X(l) = T.X - i) and (Loc.Rel_Y(l) = T.Y - Y) and (Loc.Rel_Z(l) = T.Z) then begin
ShowShapes(l,T.X - i,T.Y - Y,G,-YY,clwhite);
Dec(i);
Inc(G);
end;

if (Loc.Rel_X(l) = T.X - i - 3) and (Loc.Rel_Y(l) = T.Y - Y) and (Loc.Rel_Z(l) = T.Z) then begin
ShowShapes(l,T.X - i - 3,T.Y - Y,G,-YY,clwhite);
Dec(i);
Inc(G);
end;


Inc(l);
if l >= Loc.getTileSize(P.Z) + 300 then  ///zmniejszone do 300 pozycji z 2000 xd
l :=  Loc.getTileSize(P.Z);
until i = - 9;


end;


procedure ShowShapes (TileNum,RelX,RelY,Left:Integer;Top:Integer; Color : TColor);
var
F,StackSize,TileId,MapTile_Address,ObjectID,Z,E:Integer;
begin
{
* tutaj odczytywanie
}

Form1.Lebele('TileNum :'+ IntToStr(TileNum) + ' ' +
  'Rel X :'+ IntToStr(RelX) + ' ' +
  'Rel Y :'+ IntToStr(RelY) + ' ' +
  'Stack :'+ IntToStr(StackSize) + ' ' +
  'TileID :' + IntToStr(TileId) + ' ' +
  'ObjectID :' + IntToStr(ObjectID) + ' '
  ,Left,Top,Color);
end;

procedure TForm1.Lebele (Caption : String ; Left : Integer;Top : Integer; Color : TColor);
var
MyLabel1 :  TShape;
begin
 MyLabel1 := TShape.Create(TabSheet1);
 MyLabel1.Shape := stRectangle;
 MyLabel1.Visible := false;
 MyLabel1.Brush.Style := bsSolid;
 MyLabel1.Brush.Color := Color;
 MyLabel1.Pen.Style := psSolid;
 MyLabel1.Pen.Color := clRed;
 if Left < 20 Then begin
 MyLabel1.Left :=500 + (Left*10);
 MyLabel1.Top := 120 + (Top*10);
 end;
 MyLabel1.Width :=  10;
 MyLabel1.Height := 10;
 MyLabel1.Pen.Width := 1;
 MyLabel1.Parent := TabSheet1;
 MyLabel1.ShowHint := True;
 MyLabel1.Hint := Caption;
 MyLabel1.Visible := true;
end;


 

Na początku wykonuje się ona w około 120 ms a potem rośnie ;/

0

problem jest dokładnie tutaj

Ramzez napisał(a)

pokazuje 192 shapów do pokazania mapy.

następny genialny pomysł - wezmę 100 paneli, 200 kształtów, 300 przycisków, wszystko to rzucę na formę, będę to sobie przesuwał, pokazywał/chował, klikał i malował i MA DZIAŁAĆ PŁYNNIE...

0

Ma działać...

Usunięcie starych shapów bardzo pomogło teraz procedura wykonuje się w 120ms a BEZ dodawania shapów 4 ms szybciej co jest dziwne.

1

@Misiekd, to że on używa sposobu wolnego w sobie nie znaczy że ma zwalniać w czasie działania.

@Ramzez, no to w czymś jeszcze problem czy możesz zaakceptować rozwiązanie? .

P.S. 4ms różnicy znaczy tyle co błąd pomiarowy.

0

Szybciej to chyba już nie będzie się dało więc musi tak zostać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1