Integer Posted September 17, 2010 Report Share Posted September 17, 2010 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 to comment Share on other sites More sharing options...
Toster Posted September 17, 2010 Report Share Posted September 17, 2010 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 /> Link to comment Share on other sites More sharing options...
Integer Posted September 17, 2010 Author Report Share Posted September 17, 2010 No tak tylko..., może ja się źle wyraziłem , zamieniłem x3:= 3*x; na x3:= x shl 2; Inc(x3, x); czyli w tym kontekście operuję na tych samych zmiennych a tylko sposób się zmienił. Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.