Utasítások, függvények gyorsasága?
2011-07-26T22:43:25+02:00
2011-07-28T13:07:18+02:00
2022-06-30T14:46:06+02:00
  • Mutasd a teljes hozzászólást!
  • Profilerezés? Már ha van olyan delphi alatt? :)
    Mutasd a teljes hozzászólást!
  • Én végig egyet értek veled, csak pontosítottam a korábbi megjegyzésedet erre a konkrét esetre, ahol is a ciklusfeltételről beszéltünk, és az itt megadott definícióddal értelmében véve utaltam arra, hogy nem minden kifejez, hanem csak a logikaiak jöhetnek szóba.
    Mutasd a teljes hozzászólást!
  • A feltétel nem feltétlen csak egy végérték lehet, ugye,

    A feltétel azért feltétel, mert az értékétől függően más és más fele mehet a program. Csak azért mondtam, hogy a feltétel egy kifejezés kiértékelésének végeredménye. Pontosabb megfogalmazásban :
    Kifejezés
    A kifejezés operátorok és operandusok sorozatából épül fel. A kifejezéseket két csoportját az aritmetikai (a + 3.2*sin(y)) és a logikai ((x < 2 ) and (y > 3)) kifejezések alkotják. Az aritmetikai kifejezés kiértékelésének eredménye mindig egy számérték, míg a logikai kifejezés értéke egy logikai érték, ami igaz vagy hamis.
    Mutasd a teljes hozzászólást!
  • No, nekem, ha nem ia az első, de az első oldalon.
    Valami ilyenre gondolnék, de nem csak egyre, nem egy könyvben szétszórva, ha több is van benne, és csak a gyorsaságok összehasonlítására törekedve, illetve, ha lehet az összes lehetséges összehasonlításra (minden családban: (pl.: ciklusok, konverziók, stb
    Nem is vagyok kívánós, ugye... )
    Mutasd a teljes hozzászólást!
  • ... a logikai változók halmazán értelmezve.
    Mutasd a teljes hozzászólást!
  • Értem, hogy mit kérdezel, csak nem igazán értem, hogy miért kérdezed...
    Mutasd a teljes hozzászólást!
  • A feltétel nem más mint egy kifejezés kiértékelésének végeredménye, nem?
    Mutasd a teljes hozzászólást!
  • A feltétel nem feltétlen csak egy végérték lehet, ugye, hanem egy igaz/hamis érték, aminek értéke meg simán változhat a ciklusmagtól függően, ahogy én tudom
    Mutasd a teljes hozzászólást!
  • Természetesen, a while-ciklus flexibilisebb, bár olyannal még nem találkozam, hogy a ciklus végértéke menet közben megváltozott volna, azzal viszont gyakran, hogy bizonyos esetben ki kell lépni a ciklusból (lehetőleg nem GOTO-val), pl:

    talált := -1; i:= 0; WHILE (i<maxi) AND (talalt=-1) DO BEGIN IF valami THEN talalt := i; Inc (i); END;
    Mutasd a teljes hozzászólást!
  • A keresődbe írd be, hogy "which is the faster procedure and why, delphi"

    Az első találat 'Inside Delphi 2006, 90.oldal'
    Képfeltöltés.hu - korlátlan ingyen tárhely képeidnek, regisztráció nélkül
    Mutasd a teljes hozzászólást!
  • Értem mit akarsz mondani, csak nem igazán értem, hogy mit is akarsz tudni?
    Mutasd a teljes hozzászólást!
  • Igen, egyetértek, és csekély progtechnikai gyakorlatommal is belátható, hogy ez az első lépés az optimalizálásban. Viszont másodiknak jöhet az én kérdésem szerinti hozzá állás.
    Egyébként meg itt a gyorsabb alkalmazással pont azt áldozzuk fel, ami pl. a for-ral szembeni "forja"/előnye a while-nak, hogy ebben a cikluson belül is változtathatjuk a feltételt.
    Mutasd a teljes hozzászólást!
  • A gyorsaság valóban hw függő mindenképp, ám a gyorsabbság már nem annyira. Tehát a viszony két pl. a fenti NevemTeve fajta kód között inkább állandó, mint nem.
    Mutasd a teljes hozzászólást!
  • Ne így akarj optimalizálni, nem vezet sehová. Az természetesen igaz (és magadtól is kell tudjad), hogy az alábbi kettő közül melyik a jó, és melyik nem:

    egyik counter := initialValue; while counter <= kiszámítvalamit_függvény do begin counter := Succ(counter); end; másik counter := initialValue; finalValue := kiszámítvalamit_függvény; while counter <= finalValue do begin counter := Succ(counter); end;
    Mutasd a teljes hozzászólást!
  • Függ a hardver konfigurációtól is. Pl.: Lehet, hogy te 2 giga rammal, 2000Mhz-s processzorral tesztelsz, és esetleg nekem nincs csak egy '87-s kiadású IBM fekvő gépem, amiben 90Mhz-s proci ketyeg, 1 Mb rammal...Nálad pik-pak lefut a program, nekem meg pik.................pak , és csak aztán fut le...
    Mutasd a teljes hozzászólást!
  • Szigorú értelemben, persze talán nincs, de nagy általánosságban talán igen. AS help-ben pl. ezt olvasom:


    begin
    counter := initialValue;
    while counter <= finalValue do
    begin
    ... {statement};
    counter := Succ(counter);
    end;
    end
    The difference between this construction and the for...to statement is that the while loop reevaluates finalValue before each iteration. This can result in noticeably slower performance if finalValue is a complex expression, and it also means that changes to the value of finalValue within statement can affect the execution of the loop.



    ami már felvet megfontolandó dolgokat egy kezdó kódolónak, és én is valami hasonló "aranyköpések" gyűjteményre, vagy táblázatra vágynék. Mert pl. az előző hsz-emben felvetett copy vs. pos összehasonlítás sem egyértelmű, pedig mindkettőt alkalmazhatom ugyanarra, és ránézésre nem dönthető el. Mérni persze mérhető, de minden második utasításnál mérni tán nem kellene, ha előre tudom nagyjából...
    Mutasd a teljes hozzászólást!
  • Pont az általad írt 1. pont miatt nincs értelme az általános összehasonlítgatásoknak
    Mutasd a teljes hozzászólást!
  • Persze, igazad van, le lehet mérni így úgy, meg végülis a konkrét kóddal, ami a lényeg, csak egyrészt:
    1. szerintem "kódkörnyezet-függő" is lehet a dolog, tehát egy méréssel nem biztos, hogy más környezetre érvényes értéket is kapok, másrészt:
    2. lehetnek olyan dolgok, amire én nem gondolok, hogy figyelembe kellene vennem a mérésnél, amikor próbálom összeállítani a saját kis kódot (pl. kombinációk, az egyiknél használhatom, a másiknál nem, tehát más kódreészletet kell alkalmaznom, amimár nem azonos körülmény, stb. Harmadrészt:
    3. mag spórolnám a mindegyiket mindegyikkel összehasonlító mérést, helyette inkább általános elvek érdekelnének, amiket a konkrét eseteimre alkalmazva, magam is meg tudom saccolni, hogy melyiket lenne érdemes választanom, negyedrészt:
    4. Mivel ezek az összehasonlítások szerintem megfogalmazhatók, és állandónak tekinthetők, talán létezik is ez a leírás már, megspórolva az időmet, és nem ismeretből/tévedésből fakadó hibáimat.

    Egyébként a konkrét esetekre vonatkozóan persze alkalmazhatom, amit írtál, és köszönöm neked!
    Mutasd a teljes hozzászólást!
  • Nem konkrét választ adok, hanem egy tippet. Mérd le Te magad a gyorsaságukat szerintem. Használj jó nagy méretű adatot (karakterláncot), úgy könnyebben kijön a különbség. Ezzel a kóddal lemérheted a dolgokat:


    var intStartTime, intEndTime, intFrequency: Int64; singleElapsedSeconds: Single; begin QueryPeformanceFrequency(intFrequency); QueryPerformanceCounter(intStartTime); {Kód, aminek a sebességét méred.} QueryPerformanceCounter(intEndTime); singleElapsedSeconds := (intEndTime - intStartTime) / intFrequency; end.
    Mutasd a teljes hozzászólást!
  • Vajon elérhető valahol egy összehasonlító leírás, vagy táblázat, ami összeveti futási gyorsaság alapján a Delphi-ben alkalmazható utasítások, és függvények gyorsaságát? A help-ben erre utaló megjegyzéseket nem-igen találtam, egyedül csak annyit, hogy a while/repeat bizonyos feltételek esetekben lasabb a for ciklusnál. De mondjuk, hogy POS, vagy ANSIPOS függvények eltérő sebességüek-e, vagy, hogy a POS, vagy a COPY-val való összehasonlítás gyorsabb-e egy karaktersor megtalálásánál egy stringben, ezekre nem találtam semmit. Pedig ahol számít a sebesség, ott jó lenne egyben látni ezeket az összehasonlításokat...a
    Mutasd a teljes hozzászólást!
Címkék
abcd