我使用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
。
是否有人看到我的代码有问题,或者对我的代码有什么建议?也许花了很长时间,尽管看起来似乎很多余。
答案 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。