boost :: iostreams :::: copy кажется слишком медленным - PullRequest
1 голос
/ 08 мая 2019

Я использую boost::iostreams::::copy в его обычной роли сжатия потока в памяти. Однако при копировании довольно большого сжатого потока это кажется слишком медленным: ~ 30 МБ может занять ~ 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 голосов
/ 08 мая 2019

В потрясающем, нет, потрясающем повороте событий, кажется, 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 вотладки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...