提升IO流和ZLib速度

时间:2012-12-10 19:30:56

标签: c++ performance boost zlib boost-iostreams

我有一个大型数据文件,我使用升级IOStreams和过滤流缓冲区使用Zlib压缩:

boost::iostreams::array_source uncompressedArray( reinterpret_cast< const char* >( &uncompressedData[0] ), uncompressedData.size() );

boost::iostreams::filtering_streambuf< boost::iostreams::output > out;
out.push( *m_compressor );
out.push( boost::iostreams::char_back_inserter( compressedData ) );
boost::iostreams::copy( uncompressedArray, out );

对于速度,我使用以下内容初始化zlib库:

boost::iostreams::zlib_params params;
params.level = boost::iostreams__zlib::best_speed;
params.mem_level = 9;

m_compressor.reset( new boost::iostreams::zlib_compressor( params, 131072 ) );
m_decompressor.reset( new boost::iostreams::zlib_decompressor( params, 131072 ) );

我的解压缩器看起来像这样:

boost::iostreams::array_source compressedArray( reinterpret_cast< const char* >( &compressedData[0] ), compressedData.size() );

boost::iostreams::filtering_streambuf< boost::iostreams::input > m_in;
m_in.push( *m_decompressor );
m_in.push( compressedArray );       
boost::iostreams::copy( m_in, boost::iostreams::char_back_inserter( uncompressedData ) );

我的问题是,有什么方法可以加快充气(减压)操作吗?现在,压缩占据了我数据访问时间的大约83%,我真的需要更快地实现这一点。任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:3)

加速解压缩的唯一方法是使压缩数据更小,因此处理起来更少。这意味着要花费更多的时间进行压缩,假设您并不关心此时的处理时间。所以你会选择最好的压缩。

答案 1 :(得分:1)

至少在Windows上,我们使用zlib C接口测量了20%的改进。经过仔细分析后发现,boost :: iostreams :: filtering_streambuf&amp; iostream开销是主要区别。