Forum » Programiranje » hitro branje datotek v C-ju...
hitro branje datotek v C-ju...
hatch ::
Dejstvo je, da C na tem podrocju popolnoma odpove...
fread, fscanf in podobna sranja so odurno pocasna. Sam nisem hotel verjeti, da je "fgetc" v zanki po 20x hitrejsi od freada in fscanf, kjer naj bi prebral cel blok naenkrat.
seveda, pa tudi fgetc ni nevemkako hiter.. ce ne zaradi drugega, zato ker je potem potrebno posamezne karakterje zdruziti.
Pac, ker delam neke vrste crc check za file, mora bit stvar izredno hitra...
Zato sem naredil tako...
for(a=0;a fseek(fd, a, SEEK_SET);
fgetc(fd);
hash = hash + hashme(fd->_ptr, hash);
}
fd->_ptr je kazalec na buffer od reada
En problem je... sam fseek ne zapolni bufferja.. da se buffer zapolni je treba nekaj prebrati iz datoteke, zato tisti "fgetc(fd)"..
fflush tudi ne dela...
fgetc ima pa en grd stranski ucinek.. seek prestavi za 1, tako da mi vsakih 512bytov (toliko je dolg buffer), 1 byte spusti.
za info.. sedaj mi dela hash s poljubnim integerjem s priblizno 10MByte/s.. vendar se vedno nisem zadovoljen z rezultatom...
fread, fscanf in podobna sranja so odurno pocasna. Sam nisem hotel verjeti, da je "fgetc" v zanki po 20x hitrejsi od freada in fscanf, kjer naj bi prebral cel blok naenkrat.
seveda, pa tudi fgetc ni nevemkako hiter.. ce ne zaradi drugega, zato ker je potem potrebno posamezne karakterje zdruziti.
Pac, ker delam neke vrste crc check za file, mora bit stvar izredno hitra...
Zato sem naredil tako...
for(a=0;a
fgetc(fd);
hash = hash + hashme(fd->_ptr, hash);
}
fd->_ptr je kazalec na buffer od reada
En problem je... sam fseek ne zapolni bufferja.. da se buffer zapolni je treba nekaj prebrati iz datoteke, zato tisti "fgetc(fd)"..
fflush tudi ne dela...
fgetc ima pa en grd stranski ucinek.. seek prestavi za 1, tako da mi vsakih 512bytov (toliko je dolg buffer), 1 byte spusti.
za info.. sedaj mi dela hash s poljubnim integerjem s priblizno 10MByte/s.. vendar se vedno nisem zadovoljen z rezultatom...
Thomas ::
PowerBasic tukaj zagotovo zmaga nad C++.
O cemer sem govoril v topicu "Kateri jezik za programiranje".
O cemer sem govoril v topicu "Kateri jezik za programiranje".
Man muss immer generalisieren - Carl Jacobi
Vredno ogleda ...
Tema | Ogledi | Zadnje sporočilo | |
---|---|---|---|
Tema | Ogledi | Zadnje sporočilo | |
» | [c] Enaki datotekiOddelek: Programiranje | 1028 (888) | Spura |
» | delo z niziOddelek: Programiranje | 2968 (2512) | tx-z |
» | branje iz datoteke c/c++Oddelek: Programiranje | 1448 (1317) | Vesoljc |
» | kazalci, funkcije ipd...Oddelek: Programiranje | 1305 (1236) | OwcA |
» | Collision detectionOddelek: Programiranje | 1915 (1667) | Senitel |