我必须在 CSV 文件中记录大量数据,每行有 5 个元素。我使用了一个大缓冲区来存储行,然后在它被填充时一次性刷新它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 小时内都没有完成。还有其他一些基本缺陷吗?