Fordítási optimalizáció? 2012-09-04T09:58:12+00:00
7 bejegyzés megtekintése - 1-7 / 7
  • Szerző
    Bejegyzés
  • siker
    Tag
    Bejegyzések száma: 16
    #1649 |

    Szia Radu!
    Olvastam a könyvet de nem emlékszem rá, hogy le van-e írva.
    Az mql4-ben van “Complete Boolean Evaluation Directive” fordítási optimalizáció, vagy nincs?
    pl:
    if (a==true || lassu_muvelet()==true)

    Más nyelveken ha ez be van kapcsolva akkor a fordító nem ellenerőzi le a feltétel mind két paraméterét, hanem igaznak veszi mert, az első feltétel már igaz így nem kell ellenőrizni a másodikat mert már nem fogja befolyásolni a végeredményt. Ez akkor lehet hasznos ha a második feltétel sokkal lassabb kiértékelésű lenne, és nincs mindig szükség a lefuttatására.

    Radulovic Attila
    Tag
    Bejegyzések száma: 631

    A lassu_muvelet() függvény mindenképpen le fog futni az “a” feltétel teljesülésétől függetlenül, így mindenképpen érdemes azt beágyazni. Én legalábbis jelentős optimalizációt értem el ily módon.

    siker
    Tag
    Bejegyzések száma: 16

    Köszönöm!
    Pont ezért kérdeztem én is.

    COF258
    Tag
    Bejegyzések száma: 30

    Szia!
    Ezt az ún. fordítási optimalizáltságot, hogyan lehet mérni illetve elérni.

    COF258
    Tag
    Bejegyzések száma: 30

    Kicsit olvasgattam. Elvileg a ki lehet nyerni a valós időt teszt közben is, ám nekem nem működik. Továbbra is a teszt kezdeti időértéket és a tesztvégi időértéket kapom vissza.
    Nem tudjátok mi a hiba?
    http://forum.mql4.com/9900#400075

    Valamint érdekelne az is, hogy két tick között mennyi idő alatt futhat le. Ezt hogy tudnám elérni?

    Radulovic Attila
    Tag
    Bejegyzések száma: 631

    header részbe:

    int
          sumTime,
          sumTimeCount;
    

    start() rész legelejére:

       int startTime = GetTickCount();
    

    [robot kódja, minden feladat, ami csak van]

    start() rész végére:

       int tTime = GetTickCount() - startTime;
    
       sumTimeCount++;
       sumTime += tTime;
    

    És végül a deinit() részbe:

       Print (StringConcatenate("Összes futásidő: ", sumTime, " ezredmp. / ", DoubleToStr(sumTime / 1000, 2), " mp (", sumTimeCount, " db futás)"));
    
    COF258
    Tag
    Bejegyzések száma: 30

    Hogy ez nekem miért nem jutott eszembe?!
    Nagyon szépen köszönöm. 🙂

7 bejegyzés megtekintése - 1-7 / 7

A hozzászóláshoz jelentkezz be!