私のアプリケーションでは、ソートされたファイルをマージしようとしているので(もちろん、それらをソートしたままにします)、両方のファイルの各要素を反復処理して、最小値を3番目のファイルに書き込む必要があります。これは、他に選択肢がない限り(反復を実行する必要があります)、大きなファイルではかなり遅く動作します。ファイルの読み込みを最適化しようとしています。バッファリングに使用できるRAMをある程度使用できます。つまり、100Mbのようなものを一度読み取って、その後、バッファに要素がなくなるまでそのバッファで作業できるようになるたびに、両方のファイルから4バイトを読み取る代わりに、バッファを再度補充します。しかし、ストリームがすでにそれを行っている場合、それは私にもっとパフォーマンスを与えるでしょうか、そして何か理由がありますか?fstreamがそうする場合、多分私はそのバッファのサイズを変更することができますか?
追加した
私の現在のコードはそのように見えます(擬似コード)
// this is done in loop
int i1 = input1.read_integer();
int i2 = input2.read_integer();
if (!input1.eof() && !input2.eof())
{
if (i1 < i2)
{
output.write(i1);
input2.seek_back(sizeof(int));
} else
input1.seek_back(sizeof(int));
output.write(i2);
}
} else {
if (input1.eof())
output.write(i2);
else if (input2.eof())
output.write(i1);
}
私がここで嫌いなのは
- seek_back-4バイトをピークする方法がないため、前の位置にシークバックする必要があります
- ファイルからの読み取りが多すぎます
- ストリームの1つがEOFにある場合でも、別のストリームのコンテンツを直接出力するのではなく、そのストリームをチェックし続けますが、チャンクサイズはほとんど常に等しいため、これは大きな問題ではありません。
その改善を提案できますか?
ありがとう。