メモリに大きな配列があります。私はこれをファイルに書いています:
FILE* fp = fopen("filename", "wb");
fwrite(array, sizeof(uint32_t), 1500000000 , fp); // array saved
fflush(fp) ;
fclose(fp);
次を使用して再度読み取ります。
FILE* fp = fopen("filename", "rb");
fread(array, sizeof(uint32_t), 1500000000 , fp);
fclose(fp);
書き込みには 7 秒、読み取りには 5 秒かかります。
実際には、配列全体を記述する必要はありません。条件を確認しながら書いたり読んだりしなければなりません。のように (例):
#include<iostream>
#include <stdint.h>
#include <cstdio>
#include <cstdlib>
#include <sstream>
using namespace std;
main()
{
uint32_t* ele = new uint32_t [100] ;
for(int i = 0; i < 100 ; i++ )
ele[i] = i ;
for(int i = 0; i < 100 ; i++ ){
if(ele[i] < 20)
continue ;
else
// write ele[i] to file
;
}
for(int i = 0; i < 100 ; i++ ){
if(ele[i] < 20)
continue ;
else
// read number from file
// ele[i] = number * 10 ;
;
}
std::cin.get();
}
このため、私がやっていることは次のとおりです。
使用して書く:
for(int i = 0; i < 1500000000 ; i++ ){
if (arrays[i] < 10000000)
continue ;
uint32_t number = arrays[i] ;
fwrite(&number, sizeof(uint32_t), 1, fp1);
}
そして、次を使用して読む:fread(&number, sizeof(uint32_t), 1, fp1);
この場合、書き込みには 2.13 分、読み取りには 1.05 分かかります。
これは私にとってかなり長い時間です。なぜこれが起こっているのですか(2番目のケースではファイルサイズが最初のものよりも小さい)? そして、この問題を解決する方法は? 他のより良いアプローチはありますか?