Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
Autor | Správa |
---|
Registrovaný: 29.08.06 Prihlásený: 18.12.15 Príspevky: 32 Témy: 16 | 16 |
Zdravím, ide asi o toto: Mám rozsiahle - stovky MB - .asc súbory, kde sú len čísla, jedno číslo na riadok a hneď nový riadok.... je to surový výstup z AD prevodníka. No a chcem to načítať ako pole čísel do RAM. Som začiatočník, tak som použil niečo takéto: ( je tam pol milióna čísel-na skúšku)
#include <stdio.h>
#include <stdlib.h>
#define n 500000
static float Y1[n];
int main()
{
int i;
FILE *F1;
F1= fopen("C:\001.asc","r");
for(i=0;i<n;i++)
{
fscanf(F1,"%f\n",&Y1[i]);
}
fclose(F1);
return 0;
}
No pri 4MB súbore to načítava až 3sekundy. HDD je sata a DDR2. Ako by som to mohol urýchliť? Vďaka za pomoc
|
|
Registrovaný: 30.04.08 Prihlásený: 15.05.15 Príspevky: 884 Témy: 3 | 3 |
Myslim, ze sa to uz nebude dat, pri takom pocte cisel...
_________________ Empty your memory, with a free()… like a pointer! If you cast a pointer to an integer, it becomes the integer, if you cast a pointer to a struct, it becomes the struct… The pointer can crash…, and can overflow… Be a pointer my friend… |
|
Registrovaný: 29.08.06 Prihlásený: 18.12.15 Príspevky: 32 Témy: 16 | 16 |
Ide o to, že ten 4MB súbor kopíruje do RAM 3 sek. A to je strašne dlho či nie?
|
|
Registrovaný: 11.01.09 Prihlásený: 26.12.24 Príspevky: 1395 Témy: 10 | 10 Bydlisko: Hrinova | |
Registrovaný: 28.04.07 Prihlásený: 03.11.09 Príspevky: 133 Témy: 1 | 1 |
On sa nielen kopíruje, ale každý znak sa musí aj skontrolovať, či zodpovedá formátu zadanému v scanf().
Najviac by si to zrýchlil tak, keby si z prevodníka vedel nejako získať dáta v binárnom formáte a nie textovom. Potom by ti na načítanie stačil iba jediný fread(), a rýchlosť by bola limitovaná iba rýchlosťou hdd - bežne niekoľko desiatok Mb/s. Bonus - v binárnom formáte by tie súbory zaberali menej miesta.
Mohol by si ich zmeniť na binárny formát aj dodatočne, ale oplatí sa ti to len ak plánuješ pracovať s jedným súborom viackrát.
|
|
Registrovaný: 29.08.06 Prihlásený: 18.12.15 Príspevky: 32 Témy: 16 | 16 |
imcold: Máš pravdu, niečo takéto som mal na mysli, no nevedel som to pomenovať. Po každom čísle je newline, ak by som ten odstránil, jednoduchým programom, potom by to bolo síce nečitateľné, ale nestačilo by zmeniť koncovku súboru na .bin a potom by som to z RAM už načítaval po 4bytových úsekoch-keďže ide o floaty? Neviem,lebo som z bin. nerobil, len s textovými. Ja totižto z toho HDD ten súbor potrebujem natiahnuť do RAM len raz a potom sa nad ním vykonáva veľa operácií. Chcel by som, aby to išlo ako pri kopírovaní vo wine, kde to je aj 30 MB/s.
|
|
Registrovaný: 29.08.06 Prihlásený: 18.12.15 Príspevky: 32 Témy: 16 | 16 |
už to behá, odstránil som \n, skonvertoval som ten .asc na .bin a načítal cez fread po 4 bytoch a dostal som sa na cca 30MB/s pri čítaní z HDD do RAM. diky za pomoc
|
|
Registrovaný: 08.03.09 Prihlásený: 06.10.20 Príspevky: 1116 Témy: 88 | 88 Bydlisko: 00100100 |
das sem ten novy zdrojak rad by som sa pozrel
_________________ Programming is The Best
Hackers Are Not Crackers!!! Hackers build things, crackers break them!
;-) |
|
Registrovaný: 29.08.06 Prihlásený: 18.12.15 Príspevky: 32 Témy: 16 | 16 |
Takže tu je to len tak narýchlo:
mám už binárny súbor na danej ceste, zatiaľ najväčší súbor čo som mal obsahoval 15e6 čísel tak preto je ich tam práve toľko. Aby som to mohol kvázi odmerať,tak som tam vložil ten getchar().
#include <stdio.h>
#include <stdlib.h>
#define n 15000000
static float Y[n];
int main()
{
char z;
FILE *F;
F= fopen("C:/data.bin","rb");
printf("filling data to RAM will start\n");
z=getchar();
fread(Y,sizeof(float),n,F);
printf("data transfer completed\n");
z=getchar();
return 0;
}
|
|
Stránka: 1 z 1
| [ Príspevkov: 9 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| v Operačné systémy Microsoft | 2 | 393 | 14.04.2008 12:58 trojsky.kon | | v Poskytovatelia internetu | 10 | 1163 | 21.11.2007 18:40 OmeGa | | v Operačné systémy Microsoft | 16 | 1768 | 25.08.2008 21:27 desann | | v Ostatné | 0 | 618 | 23.09.2008 17:45 mimo1188 | | v Siete | 21 | 3281 | 06.04.2016 21:09 Skyro | | v Siete | 16 | 1228 | 16.10.2013 12:30 _Mailo_ | | v Operačné systémy Microsoft | 0 | 409 | 18.08.2020 8:31 steelersfan | | v Sieťové a internetové programy | 1 | 534 | 22.09.2010 23:40 Milanese | | v Assembler, C, C++, Pascal, Java | 0 | 652 | 30.12.2011 17:03 head0r | | v Assembler, C, C++, Pascal, Java | 8 | 378 | 03.11.2013 18:06 Rioner | | v Ostatné | 4 | 848 | 15.12.2016 17:23 tatko Tom | | v Operačné systémy Microsoft | 3 | 625 | 29.09.2010 11:41 Googler1 | | v JavaScript, VBScript, Ajax | 7 | 600 | 03.11.2012 18:58 Ravokman | | v PHP, ASP | 7 | 636 | 17.09.2007 15:59 pitrik1 | | v JavaScript, VBScript, Ajax | 3 | 444 | 28.11.2009 23:19 pogo | | v Siete | 5 | 518 | 22.04.2011 18:56 walther |
|