各行に 5 つの要素がある CSV ファイルに大量のデータを記録する必要があります。私は行を格納するために大きなバッファを使用しfwrite(...)
、それがいっぱいになったときにそれを一度にフラッシュし、必要になるまで繰り返しました。以下は、ロギング機能のスニペットです。
void logInFile(int a, int b, int c, int d, int e)
{
sprintf(rowInLog,"%d,%d,%d,%d,%d\n",a,b,c,d,e);
int bytesInRow = strlen(rowInLog);
if(bytesInRow + bytesUsedInBuffer <= sizeOfBuffer)
{
strcat(buffer, rowInLog);
bytesUsedInBuffer += bytesInRow;
}
else
{
printf("flushing file to disk\n");
fwrite(buffer, bytesUsedInBuffer, 1, fp);
memset(buffer, 0, sizeOfBuffer);
bytesUsedInBuffer = 0;
strcat(buffer, rowInLog);
bytesUsedInBuffer += bytesInRow;
}
}
しかし、これは実行を非常に遅くしています。 「ファイルをディスクにフラッシュしています」というメッセージが画面に表示されないため、フラッシュが原因ではありません。このロギング関数を呼び出さないと、プログラム全体が数分で実行されますが、これに伴い、2 時間でさえ完了しませんでした。他に根本的な欠陥はありますか?