[经历] write+commit与ofstream的比较
前些日子, 测试提单, 直接写文件的情形下, 日志生成太慢, 影响体验
老代码(历史遗留代码):
Windows:
_write() + _commit() // 经过测试, 每秒日志不足50条
和
Linux:
write() + fsync()
尝试过各种可能问题的修改, 都不见效, 最后考虑换函数, 改用C++的ofstream:
ofstream::write() + ofstream::flush() // 经过测试, 每秒日志可达到20000多条
......
[解决办法]
[解决办法]
这不科学啊。
[解决办法]
有缓冲的IO函数会好一些。
[解决办法]
摒弃fstream
使用FILE *
[解决办法]
难道fstream..........有更优秀的实现?
[解决办法]
因为ofstream的flush清的是自己的缓存,东西可能留在os的缓存里没写进磁盘。当然会更快……
[解决办法]
缓存对性能有质的飞跃, 前提是你的程序最好别挂掉。
[解决办法]
信赵老师全身打滚。c库的FILE相关的操作也是有(和os缓存不同的)缓存的,用fflush就和你的ofstream.flush一样,不保证写入磁盘。
[解决办法]
貌似你的fwrite用法有问题。这个函数返回的是count(对应第三个参数),不是size(对应第二个参数),也就是每次成功都返回1(因为你给的count是1)。这个返回值不会有负数,如果失败,返回一个比count小的值。
你试试把第二个参数和第三个参数交换一下
int iWirteLen = fwrite(pszData, 1, iDataLen, s_pFile)