0

ファイルにデータを書き込んだ後、fstream を閉じるのに 30 秒以上かかるのはなぜですか? 書けば書くほど、閉じるのに時間がかかります。

fstream *writeReadStream = new fstream("/media/username/KODAK/file.bin", fstream::in | fstream::out | fstream::binary);
writeReadStream->seekg(0x100000);
char randomData[0x100000];

for (int i = 0; i < 0x270; i++)
    writeReadStream->write(randomData, 0x100000);

writeReadStream->close();
delete writeReadStream;

closeデバッグ中に、アプリケーションが呼び出しでハングすることがわかりました。デバッグをしなくても、呼び出しprintfの前後に をclose呼び出すと、2 番目の に到達するまでに長い時間がかかりprintfます。繰り返しますが、書けば書くほど時間がかかります。理由はありますか?

これは、フラッシュ ドライブ/SD カードでのみ発生するようです。

4

3 に答える 3

0

あなたはかなりの量のデータを書いています。問題はバッファリングが原因である可能性があります。私があなたなら、バッファリングされていない C API を試します。

FILE *fd = std::fopen("/home/username/Desktop/file.bin", "w");
if (!fd) {
   // handle error
}
std::setvbuf(fd, NULL, _IONBF, 0);

if (0 != std::fseek(fd, 0x100000, SEEK_SET)) {
    // handle error
}
for (int i = 0; i < 0x270; i++) {
    if (1 != std::fwrite(randomData, 0x100000, 1, fd)) {
         // handle error
    }
}

close(fd);

速いかどうかを確認する

于 2013-06-05T01:13:00.213 に答える
0

書き込みはバッファリングされた可能性があります。閉じるとフラッシュされるため、最初にディスクに書き込まれるまで待つ必要があります。for ループにフラッシュを入れてから、クローズに時間がかかるかどうかを確認してください。

fstream *writeReadStream = new fstream("/home/username/Desktop/file.bin", fstream::in | fstream::out | fstream::binary);
writeReadStream->seekg(0x100000);
char randomData[0x100000];

for (int i = 0; i < 0x270; i++)
{
    writeReadStream->write(randomData, 0x100000);
    writeReadStream->flush();
}

writeReadStream->close();
delete writeReadStream;
于 2013-06-05T00:58:27.827 に答える