30. oktober 2003 - 00:41Der er
13 kommentarer og 1 løsning
Hurtig indlaesning fra fil
Jeg skal laese en fil, der indeholder information om noget geometri. Jeg ved om filen: 1) Den er ascii baseret. 2) Linierne er en af foelgende - v 0.0 2.34444 4.6666 - f 1 23 444 - # Dette er en kommentar - g navn
3) Der findes antal af linierne: - v linie - ukendt - f linie - ukendt - # linie - Skal ikke ind i memory - g linie - 1 stk
Hver linie definerer en identitet, noget der skal overfoere til en instans af typen ? i c. Hvordan laeser jeg dette ind i memory paa den aller hurtigste maade?
while(der er mere i filen) { læs en linie ind i en streng switch(første bogstav) { case 'v': parse resten af tallene og gem dem break; case 'f': parse resten af tallene og gem dem break; case '#': /* nothing */ break; case 'g': gem den } }
Jeg ved at MFC(hvilket jo er c++) modefoerer stort overhead. Skal jeg ned og bruge stdio lowlevel funktioner, eller er STL hurtig nok? Eller er der noget der er endnu hurtigere?
Hvad ville vaere det smarteste at goere? Er der nogle Tricks from the master programmers, jeg skal kende til her?
arne_v>> Ok, undskyld jeg ikke forklarer mig nok. Nej, det jeg savner er en super hurtig maade(hvilke funktioner) til at laese filen, ikke selve logikken i laesningen.
Hvad er hurtigst? C eller C++ loesningen? Eller det er maaske det samme. Det er fordi, jeg har proevet at lave en parser, men jeg kan slet ikke hamle op med hastigheden hvormed perl parser den samme tekst. Eftersom perl er skrevet i c, saa burde det vaere muligt. Jeg har kigget lidt paa sourcekoden fra perl til unix, men de bruger selvfoelgelig et library skrevet til unix.
Hvis performance var kritisk så var de vel slet ikke gemst som tekst !?>> Hehe, ja, det kan du have ret i. Desvaerre er det bare en standard vi foelger, og kan derfor ikke rigtig goere noget ved det :-(
Et sidste spg. Jeg har aldrig programmeret noget stort i c/c++. Du skriver f.eks. at sscanf kan bruges til at parse tallene ud med. Hvis jeg nu skulle proeve at knibe alt performance ud, ville det saa vaere hurtigere med en pointer, at loebe karakter for karakter igennem hele filen, bruge itoa(for at konvertere taellene til int - og noget andet for double) idet jeg har fundet et tal element, eller er det ligesaa hurtugt/hurtigere at bruge sscanf?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.