首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

[经历] write+commit与ofstream的比较,该怎么处理

2013-03-01 
[经历] write+commit与ofstream的比较前些日子, 测试提单, 直接写文件的情形下, 日志生成太慢, 影响体验老

[经历] write+commit与ofstream的比较
前些日子, 测试提单, 直接写文件的情形下, 日志生成太慢, 影响体验


老代码(历史遗留代码):
   Windows:
       _write() + _commit()     // 经过测试, 每秒日志不足50条
     和
   Linux:
       write() + fsync()

尝试过各种可能问题的修改, 都不见效, 最后考虑换函数, 改用C++的ofstream:
   ofstream::write() + ofstream::flush()  // 经过测试, 每秒日志可达到20000多条

......
[解决办法]
[经历] write+commit与ofstream的比较,该怎么处理
[解决办法]
这不科学啊。  
[解决办法]
有缓冲的IO函数会好一些。
[解决办法]
摒弃fstream
使用FILE *
[解决办法]
难道fstream..........有更优秀的实现?
[解决办法]
因为ofstream的flush清的是自己的缓存,东西可能留在os的缓存里没写进磁盘。当然会更快……
[解决办法]
缓存对性能有质的飞跃, 前提是你的程序最好别挂掉。
[解决办法]

引用:
引用:摒弃fstream
使用FILE *
Handle的方式是不行了, 以后如果发现ofstream不行的话, 就改用FILE方式的, 谢谢

信赵老师全身打滚。c库的FILE相关的操作也是有(和os缓存不同的)缓存的,用fflush就和你的ofstream.flush一样,不保证写入磁盘。
[解决办法]
引用:
但是 WINDOWS下:
FILE方式下, 不如ofstream写的次数多, 但生成的文件却更大... 是何道理呢? 


貌似你的fwrite用法有问题。这个函数返回的是count(对应第三个参数),不是size(对应第二个参数),也就是每次成功都返回1(因为你给的count是1)。这个返回值不会有负数,如果失败,返回一个比count小的值。

你试试把第二个参数和第三个参数交换一下
int iWirteLen = fwrite(pszData, 1, iDataLen, s_pFile)

热点排行