boost :: iostreams :::: copy似乎过慢

时间:2019-05-08 01:16:06

标签: c++ boost

我使用boost::iostreams::::copy的常见作用是压缩内存中的流。但是,复制相当大的压缩流时,它似乎过慢:〜30 MB可能需要约2分钟。

这是我的代码:

std::stringstream compress(std::stringstream& data)
{
    namespace bio = boost::iostreams;

    std::stringstream comp;
    bio::filtering_streambuf<bio::input> out;
    out.push(bio::gzip_compressor(bio::gzip_params(bio::gzip::best_compression)));
    out.push(data);
    bio::copy(out, comp);

    return comp;
}

罪魁祸首是线:

bio::copy(out, comp);

数据以字节为单位,如果有关系,则包含NUL,但我需要使用std::stringstream

是否有人看到我的代码有问题,或者对我的代码有什么建议?也许花了很长时间,尽管看起来似乎很多余。

1 个答案:

答案 0 :(得分:0)

在令人惊叹的事件中,bio::gzip::best_compression才是真正的罪魁祸首。

将其更改为bio::gzip::best_speed时,我得到了以下(大致)结果:

bio::gzip::best_compression: output size 6589968 bytes     elapsed time: 105881 ms
bio::gzip::best_speed: output size: 6589596 bytes     elapsed time: 6065 ms

因此,在我看来(完全不考虑原因-可能是数据的性质),答案是要更改压缩级别。

注意:调试时使用VC ++ 2017。