Лучшая практика чтения двоичных данных xy в C - PullRequest
0 голосов
/ 28 января 2019

В подпрограмме моего кода я читаю 10M строк двоичных целых чисел, а затем обрабатываю их.Во всем пакете эта процедура вызывается несколько тысяч раз.Код, который я использую:

for(l=0 ; l < nr_lines; l++) { 
// I use two temporary integers to store the numbers            
  fread(&ah, sizeof(int),1,file);
  fread(&bh, sizeof(int),1,file);
// and place them in the the corresponding array
  a[l] = ah;
  b[l] = bh;
}

Мне интересно, не является ли этот подход неэффективным, поскольку я вызываю функцию fread миллионы раз.Лучше ли сначала прочитать весь файл в память, а затем разобрать его в два массива?

Обновление:

На основании приведенных ниже предложений я использовал следующий код:

// read the entire file in one array
fread(c, sizeof(int),2*nr_lines, file); 
// and parse the code
for(l=0 ; l < nr_lines; l++) { 
    a[l] = c[2*l];
    b[l] = c[2*l+1];
}

Второй подход в моей системе работает в 5 раз быстрее для двоичного файла, содержащего 2 * 30M записей (2,5 секунды против 0,5 секунды).

...