Skocz do zawartości

[Delphi] szybsze instrukcje zwalniają program


Integer

Polecane posty

Witam.

 

procedure TObRG.Obszar_SzukajAll(_BmpRGB: TBitmap);
var
 X, Y: Integer;
 X3: Integer;

 p,p1,p2: pbytearray;
 ws1, ws2:^Byte;
 r,g,b: Byte;

begin
 _BmpRGB.PixelFormat:= pf24bit;
 FBmpPrev.Assign(_BmpRGB);

 // Szukanie od góry początkÓW obszarÓW, z pominięciem pixela ramki -----------
 Y:= 1; // 0
 Repeat
   p:= FBmpPrev.Scanline[y];         // żródło

   X:= 1; // 0
   Repeat
     x3:= x shl 2;  Inc(x3, x);

     // pobieranie wartości pierwszej składowej koloru
      // b:= p[x3];
      Inc(x3);
      g:= p[x3]; Inc(x3);
      r:= p[x3]; //Inc(x3);
     //if not Point_Tlo(r,     g,       B) then Obszar_WyznaczOne(x, y);

     // jeśli to nie punkty tła
     if (r=255) or (g=255) then Obszar_WyznaczOne(x, y);

     Inc(X, cSz2ObszIncX);
   Until (X>= FBmpPrev.Width-2); // -1
   Inc(Y, cSz2ObszIncY);

 Until (Y>= FBmpPrev.Height-2); // -1

 fmMain.MInf.Lines.Add('  obsz '+IntToStr(FLsOb.cnt));

end;
hvwŁ   z;3z:kĄź,:3ś3*zZaH[Ę
N^[ĘĘNHN[ĘĘNHN[ĘĘN

 

i dajie mi to zysk z ~850 msec na ~320msec na całym działaniu kodu a jak ten sam trick zastosuje w innej pod-procedurze to czas mi się wydłuża z tych ~320 na ~1400.

 

różnica jest taka że w kodzie procedury dla przypadku ~320 zmienna x3 i x jest zadeklarowana w procedurze a dla procedury ~1400 x jest parametrem wejściowym - o ile to powinno mieć jakieś znaczenie.

 

Czy ktoś wie skąd się takie niekorzystne różnice w czasie przeciwne do zamierzonych biorą?

Link do komentarza
Udostępnij na innych stronach

sama zamiana na takie sztuczki to za malo. Krytyczne jest aby w metodzie bylo jak najmniej zmiennych, optymalnie to 2-3. Wtedy operacje sa robione na rejestrach i odpada kod asma ktory przerzuca rejestry na stos i z powrotem. Ogolnie jak czesto przeplatasz rozne zmienne po calej metodzie w sposob ktory uniemozliwia kompilatorowi rozdzielenie ich wg czasu zycia to wydajnosc tez spada bo musi przerzucac zmienne pomiedzy stosem a rejestrami.

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...