我正在使用 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
。
有人看到我的代码问题还是对可以改善我的代码的原因有建议?也许只需要这么长时间才过多。
在令人惊叹的 - 不,令人jawd的事件转弯,看来 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
因此,在我的情况下,似乎(不确切考虑到数据的性质(,答案是更改压缩级别。
注意:这是DEBUG中的VC 2017。