Nopeuserot for

Tuleeko nopeuseroja jos käyttää
perinteistä for-lausetta
(for to do )
verrattuna sitä for in (for in do)
lauseeseen?


Mitä etuja tuo for in do tarjoaa
9377
Äänestä

Muut lukivat myös

Vastaukset 9

Vanhimmat

Noiden käyttötarkoitus ei ole varsinaisesti ihan sama, for to- on yleis käyttöinen, for in on lähinnä taulukoiden läpikäymiseen joka tuli D2005:sessa, ja joka vastaa pitkälle esim php:n foreach rakennetta.

Äänestä
  • Lähinnä kiinnostaa pystytäänkö tuolla
    for in -rakenteella saamaan nopeus hyötyä verrattuna
    vastaavaan for to -rakenteeseen.
    (tuskin kovinkaan paljoa)

    Eli kysy on lähinnä siitä pystyykö kääntäjä hyödyntämään jotain parempia assembler -käskyjä verrattuna for to-rakenteeseen

    Äänestä

  • For in:llä? kirjoitti:

    Lähinnä kiinnostaa pystytäänkö tuolla
    for in -rakenteella saamaan nopeus hyötyä verrattuna
    vastaavaan for to -rakenteeseen.
    (tuskin kovinkaan paljoa)

    Eli kysy on lähinnä siitä pystyykö kääntäjä hyödyntämään jotain parempia assembler -käskyjä verrattuna for to-rakenteeseen

    No luultavasti jonkun verran nopeutuu kun kahlattava taulukkomainen tietomäärä ja indeksointi hoidetaan funktion sisäisesti, ainakin lähes varmuudella nopeammin kuin käyttäjän huonosti toteuttama perinteinen for to funktio.

    Testaa itse, sehän ei ole vaikea homma esim Gettickcount -funktiolla.

    Äänestä

  • -for looppaus- kirjoitti:

    No luultavasti jonkun verran nopeutuu kun kahlattava taulukkomainen tietomäärä ja indeksointi hoidetaan funktion sisäisesti, ainakin lähes varmuudella nopeammin kuin käyttäjän huonosti toteuttama perinteinen for to funktio.

    Testaa itse, sehän ei ole vaikea homma esim Gettickcount -funktiolla.

    No minulla ei ole vielä tarpeeksi uutta Delphiä jotta voisin testata tuota.

    Äänestä

  • to do in do kirjoitti:

    No minulla ei ole vielä tarpeeksi uutta Delphiä jotta voisin testata tuota.

    Kuinka uus sen sitte pitäis olla kun toi on winapi funktio joka on ollut jo delphi 1:sestä käytössä, joskus esihistorialisella ajalla, for in funktio taas tuli vasta 2005 delphiin oliko toi nyt sitte delphi 10.
    Näin
    ...
    var alku, aika;
    ...
    alku:= gettickcount;
    //tee jotain mitattavaa tässä välissä
    aika:=gettickcount-alku;
    //aika on on nyt millisekunteja alusta

    Äänestä

  • -for looppaus- kirjoitti:

    Kuinka uus sen sitte pitäis olla kun toi on winapi funktio joka on ollut jo delphi 1:sestä käytössä, joskus esihistorialisella ajalla, for in funktio taas tuli vasta 2005 delphiin oliko toi nyt sitte delphi 10.
    Näin
    ...
    var alku, aika;
    ...
    alku:= gettickcount;
    //tee jotain mitattavaa tässä välissä
    aika:=gettickcount-alku;
    //aika on on nyt millisekunteja alusta

    siis
    ..
    var alku, aika: cardinal;
    ..

    Äänestä

  • -for looppaus- kirjoitti:

    No luultavasti jonkun verran nopeutuu kun kahlattava taulukkomainen tietomäärä ja indeksointi hoidetaan funktion sisäisesti, ainakin lähes varmuudella nopeammin kuin käyttäjän huonosti toteuttama perinteinen for to funktio.

    Testaa itse, sehän ei ole vaikea homma esim Gettickcount -funktiolla.

    GetTickCount -funktio löytyy Lazaruksestakin LCLIntf käännösyksiköstä (Siis Uses -lauseeseen pitää lisätä LCLIntf).

    GetTickCount -funktio toimii siis myös muissakin käyttöjärjestelmissä kuin windows kuten esim. Linux:ssa

    Äänestä

  • -for looppaus- kirjoitti:

    siis
    ..
    var alku, aika: cardinal;
    ..

    Todennäköisesti hän tarkoittaa sellaista Delphiä josta puuttuu For in käsky mutta haluaa tietää sen nopeuden.

    Äänestä

  • GetTickCount kirjoitti:

    GetTickCount -funktio löytyy Lazaruksestakin LCLIntf käännösyksiköstä (Siis Uses -lauseeseen pitää lisätä LCLIntf).

    GetTickCount -funktio toimii siis myös muissakin käyttöjärjestelmissä kuin windows kuten esim. Linux:ssa

    Lazarus ja GetTickCount

    Lazaruksen windows -versiossa tuo varmasti toimiikin oikein.

    mutta kokeilepa Lazaruksen linux -versiossa tätä:

    OdotaKunnesKloOn_235959(); // tämä siis odottaa, kunnes kello on 23:59:59

    T1 := GetTickCount;

    TeeJotainJokaKestaa2300milliSekuntia;


    T2 := GetTickCount;

    dT := T2-T1;

    Veikkaanpa, että Lazaruksen linuxversio joko:

    a) antaa tulokseksi 2 sekuntia

    b) antaa tulokseksi 3 sekuntia

    c) antaa totaalisesti väärän tuloksen, kun hämääntyy pahasti vuorokauden vaihtumisesta.

    Toinen, vielä pahemi testi:

    T1 := GetTickCount;

    TeeJotainJokaKestaa1Minuutti;

    T2 := GetTickCount;

    dT := T2-T1;

    ja tuon 1 min aikana sitten vaihdat konsoliin, jossa olet valmiiksi root -oikeuksin sisällä, ja vaihat siellä koneen kellonajan toiseksi.

    Veikkaanpa, että Lazaruksen linux -versio mokaa tässäkin.

    Alkaisi olla korkea aika linuxinkin APIin lisätä ihan 100% aito GetTickCount, joka ei hämäänny sen paremmin keskiyön ylittämisestä kuin koneen kellonajan muuttamisestakaan.

    Olen joskus itse koodannut linuxiin oman GetTickCount -funktion (sovellusohjelmnatasolla), mutta ei sekään täydellinen ole eikä voikaan olla, ilman kernel -ajuria.

    Äänestä

Kommentoi aloitusta


to do in do kirjoitti:

Tuleeko nopeuseroja jos käyttää
perinteistä for-lausetta
(for to do )
verrattuna sitä for in (for in do)
lauseeseen?


Mitä etuja tuo for in do tarjoaa

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu