小编use*_*250的帖子

如何使用boost :: iostreams更改缓冲区大小?

我的程序并行读取几十个非常大的文件,一次只读一行.似乎主要的性能瓶颈是HDD在文件之间寻找时间(虽然我不完全确定如何验证这一点),所以我认为如果我可以缓冲输入会更快.

我正在使用这样的C++代码通过boost :: iostreams"过滤流"来读取我的文件:

input = new filtering_istream;
input->push(gzip_decompressor());
file_source in (fname);
input->push(in);
Run Code Online (Sandbox Code Playgroud)

根据文档,file_source没有任何方法来设置缓冲区大小,但filtering_stream :: push似乎:

void push( const T& t,
  std::streamsize buffer_size,
  std::streamsize pback_size );
Run Code Online (Sandbox Code Playgroud)

所以我尝试了input->push(in, 1E9),确实我的程序的内存使用量大了,但速度根本没有变化.

我认为读取缓冲会改善性能是错误的吗?或者我做错了吗?我可以直接缓冲file_source,还是需要创建filtering_streambuf?如果是后者,那怎么办?文档并不完全是示例.

c++ boost

6
推荐指数
1
解决办法
2779
查看次数

标签 统计

boost ×1

c++ ×1