私は情報の検索と保存のコース プロジェクトを持っています。最初の部分では、ハード ディスクから大きなファイルを読み取るための最適なバッファー サイズを見つける必要があります。私たちの ta は、バッファ サイズを特定のポイント (通常は 4 バイト) まで増やすと、読み取り速度は向上しますが、その後は低下すると言います。しかし、以下のコードでは、バッファ サイズやファイル サイズに関係なく増加します (100 MB でテストしました)。私が知っていることから、バッファリングは並列非同期プロセス(スレッドなど)でのみ意味があり、ファイルが最適化されている場合、および\またはファイルディレクトリとアドレスを検索するコスト(ディスク) は十分に重要なので、問題は私のコードに関連しているのか、ifstream が物事を処理する方法に関連しているのか、それともこれらの条件がここで維持されていないのでしょうか?
ifstream in("D:ISR\\Articles.dat", std::ifstream::binary);
if(in)
{
in.seekg(0, in.end);
int length = in.tellg();
length = 100 * 1024 * 1024;
int bufferSize = 2;
int blockSize = 1024;//1kB
int numberOfBlocks = length / blockSize;
if(length % blockSize > 0) numberOfBlocks++;
clock_t t;
double time;
for(int i = 0; i < 5; i++)
{
in.seekg(0, in.beg);
int position = 0;
int bufferPosition;
char* streamBuffer = new char[bufferSize];
in.rdbuf()->pubsetbuf(streamBuffer, bufferSize);
t = clock();
for(int i = 0; i < numberOfBlocks; i++)
{
char* buffer = new char[blockSize];
bufferPosition = 0;
while(bufferPosition < blockSize && position < length)
{
in.read(buffer + bufferPosition, bufferSize);
position += bufferSize;
bufferPosition += bufferSize;
}
delete[] buffer;
}
t = clock() - t;
time = double(t) / CLOCKS_PER_SEC;
cout << "Buffer size : " << bufferSize << " -> Total time in seconds : " << time << "\n";
bufferSize *= 2;
}