由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - C++ ofstream binary output slow
相关主题
fwrite()有参数可以优化么?web services in c++
[合集] ofstream 无法使用binary mode的问题C++, Java, & Python 在Google的使用
谁能示范一个小的C程序王垠:我和 Google 的故事(2015 修订版) (转载)
一个极简单的程序求教c++ template中如何判断类型
fstream 扫盲,谢谢!ofstream and cout question
C++: Static initialization dependency请问怎么让输出文件不需要成为函数的参数
C++ ofstream的一个诡异问题Why no output file generate? What is wrong?
gcc 4.3(or +) on Mac OS 10.6怎么快速填充一个文件
相关话题的讨论汇总
话题: c++话题: file话题: filebuf话题: stra话题: ofstream
进入Programming版参与讨论
1 (共1页)
w***g
发帖数: 5958
1
怎么搞就只能搞到30MB/s的速度。7200RPM的硬盘,裸写应该可以达到100MB/s。用stra
ce发现底层是用writev实现的,每次只写8KB多一点。即使用了rdbuf()->pubsetbuf也不
行。改成FILE和fwrite后,默认也是每次写8KB多一点(BUFSIZ=8KB),但是setvbuf后就
可以buffer任意大了。这次本牛也搞不定了,希望版上的大牛们给支援一下。
b***i
发帖数: 3043
2
因素很多,比如磁盘的扇区大小,还有你是不是读了又写,磁盘测试软件结果怎么样?
可以预先设定文件大小,文件是不是在硬盘上连续,cpu如果不写磁盘光准备数据有 多
块?
文件到底多大?在windows还是linux?

stra
也不

【在 w***g 的大作中提到】
: 怎么搞就只能搞到30MB/s的速度。7200RPM的硬盘,裸写应该可以达到100MB/s。用stra
: ce发现底层是用writev实现的,每次只写8KB多一点。即使用了rdbuf()->pubsetbuf也不
: 行。改成FILE和fwrite后,默认也是每次写8KB多一点(BUFSIZ=8KB),但是setvbuf后就
: 可以buffer任意大了。这次本牛也搞不定了,希望版上的大牛们给支援一下。

n******t
发帖数: 4406
3
C++ 的stream 本来效率就低下。。。一般用用就行了。

stra
也不

【在 w***g 的大作中提到】
: 怎么搞就只能搞到30MB/s的速度。7200RPM的硬盘,裸写应该可以达到100MB/s。用stra
: ce发现底层是用writev实现的,每次只写8KB多一点。即使用了rdbuf()->pubsetbuf也不
: 行。改成FILE和fwrite后,默认也是每次写8KB多一点(BUFSIZ=8KB),但是setvbuf后就
: 可以buffer任意大了。这次本牛也搞不定了,希望版上的大牛们给支援一下。

s*****V
发帖数: 21731
4
专业的写用什么?

【在 n******t 的大作中提到】
: C++ 的stream 本来效率就低下。。。一般用用就行了。
:
: stra
: 也不

t****t
发帖数: 6806
5
basic_filebuf::setbuf()除了在buffer是null的情况下确定无buffer, 别的都是
implementation-defined.
我看了下源码, basic_filebuf内部用的是basic_file<>, which is a wrapper for
FILE*. 那个内部另有buffer, 如果只靠标准函数似乎拿不到. 我看看能不能用非标准
的东西来拿.

stra
也不

【在 w***g 的大作中提到】
: 怎么搞就只能搞到30MB/s的速度。7200RPM的硬盘,裸写应该可以达到100MB/s。用stra
: ce发现底层是用writev实现的,每次只写8KB多一点。即使用了rdbuf()->pubsetbuf也不
: 行。改成FILE和fwrite后,默认也是每次写8KB多一点(BUFSIZ=8KB),但是setvbuf后就
: 可以buffer任意大了。这次本牛也搞不定了,希望版上的大牛们给支援一下。

t****t
发帖数: 6806
6
OK, after some googling, I think you can use:
#include
__gnu_cxx::stdio_filebuf
to replace std::basic_filebuf<>. This can be constructed from a FILE*, and
you can then do whatever to that FILE* (setvbuf, for example).

stra
也不

【在 w***g 的大作中提到】
: 怎么搞就只能搞到30MB/s的速度。7200RPM的硬盘,裸写应该可以达到100MB/s。用stra
: ce发现底层是用writev实现的,每次只写8KB多一点。即使用了rdbuf()->pubsetbuf也不
: 行。改成FILE和fwrite后,默认也是每次写8KB多一点(BUFSIZ=8KB),但是setvbuf后就
: 可以buffer任意大了。这次本牛也搞不定了,希望版上的大牛们给支援一下。

w***g
发帖数: 5958
7
好吧。既然你们这几个老水车都只能想出来这个办法,我还是直接FILE*算了。也不是非
要为了C++而C++。看来C++的iostream确实效率低下。

【在 t****t 的大作中提到】
: OK, after some googling, I think you can use:
: #include
: __gnu_cxx::stdio_filebuf
: to replace std::basic_filebuf<>. This can be constructed from a FILE*, and
: you can then do whatever to that FILE* (setvbuf, for example).
:
: stra
: 也不

t****t
发帖数: 6806
8
这个确实不是为效率设计的, 不过它其实也没有太多大问题. 的思想是, 把字
节流的转换(stream层)和I/O(streambuf)分开了, 这个本身是很不错的思想.

是非

【在 w***g 的大作中提到】
: 好吧。既然你们这几个老水车都只能想出来这个办法,我还是直接FILE*算了。也不是非
: 要为了C++而C++。看来C++的iostream确实效率低下。

1 (共1页)
进入Programming版参与讨论
相关主题
怎么快速填充一个文件fstream 扫盲,谢谢!
ostream& operator << (ostream& s, int cnt) errorC++: Static initialization dependency
请问一个入门级 dynamic memory 的问题C++ ofstream的一个诡异问题
C++ problemgcc 4.3(or +) on Mac OS 10.6
fwrite()有参数可以优化么?web services in c++
[合集] ofstream 无法使用binary mode的问题C++, Java, & Python 在Google的使用
谁能示范一个小的C程序王垠:我和 Google 的故事(2015 修订版) (转载)
一个极简单的程序求教c++ template中如何判断类型
相关话题的讨论汇总
话题: c++话题: file话题: filebuf话题: stra话题: ofstream