我的程序并行读取几十个非常大的文件,一次只读一行.似乎主要的性能瓶颈是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?如果是后者,那怎么办?文档并不完全是示例.