| | |
| 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 | Napísal Peet51: 06.06.2009 15:38 | |
|
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 |
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 | Napísal autor témy Peet51: 06.06.2009 17:44 | |
|
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ý: 24.04.24 Príspevky: 1385 Témy: 9 Bydlisko: Hrinova | |
Registrovaný: 28.04.07 Prihlásený: 03.11.09 Príspevky: 133 Témy: 1 | Napísal imcold: 07.06.2009 7:24 | |
|
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 | Napísal autor témy Peet51: 07.06.2009 13:02 | |
|
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 | Napísal autor témy Peet51: 07.06.2009 15:06 | |
|
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 Bydlisko: 00100100 | Napísal reDo: 07.06.2009 17:04 | |
|
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 | Napísal autor témy Peet51: 07.06.2009 21:30 | |
|
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 |
---|
| pomale načitavanie pri spusteni v Operačné systémy Microsoft | 2 | 370 | 14.04.2008 12:58 trojsky.kon | | Fibernet pomale nacitavanie stranok v Poskytovatelia internetu | 10 | 1126 | 21.11.2007 18:40 OmeGa | | Win XP pomale nacitavanie v Operačné systémy Microsoft | 16 | 1718 | 25.08.2008 21:27 desann | | Pomale načitavanie no neviem prečo. v Ostatné | 0 | 572 | 23.09.2008 17:45 mimo1188 | | Rychle pripojenie, pomale nacitavanie stranok v Siete | 21 | 3111 | 06.04.2016 21:09 Skyro | | ORANGE DSL - pomale nacitavanie stranok ? v Siete | 16 | 1081 | 16.10.2013 12:30 _Mailo_ | | Problemy so zvukom, pomale nacitavanie videí, atd. v Operačné systémy Microsoft | 0 | 322 | 18.08.2020 8:31 steelersfan | | Pomale nacitavanie obrazkov v Exploreri 8 - prazdne okna. v Sieťové a internetové programy | 1 | 495 | 22.09.2010 23:40 Milanese | | c++ načítavanie z textového súboru atď.. v Assembler, C, C++, Pascal, Java | 0 | 614 | 30.12.2011 17:03 head0r | | programovanie v C (nacitavanie matic zo suboru) v Assembler, C, C++, Pascal, Java | 8 | 345 | 03.11.2013 18:06 Rioner | | Pomale zapinanie PC (pomale detekovanie BIOS-u) v Ostatné | 4 | 730 | 15.12.2016 17:23 tatko Tom | | Pomalé bootovanie winu + pomale vypinanie zostavy v Operačné systémy Microsoft | 3 | 570 | 29.09.2010 11:41 Googler1 | | Nacitavanie v JavaScript, VBScript, Ajax | 7 | 543 | 03.11.2012 18:58 Ravokman | | Načítavanie prvkov v JavaScript, VBScript, Ajax | 8 | 467 | 31.05.2010 18:29 DARSON | | Načítavanie premenných v PHP, ASP | 7 | 595 | 17.09.2007 15:59 pitrik1 | | nacitavanie obrazku v JavaScript, VBScript, Ajax | 3 | 415 | 28.11.2009 23:19 pogo |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|