2012-12-10 13 views
5

は私がブースト入出力ストリームとフィルタリングストリームバッファを使用してはZlibで圧縮したデータの大容量のファイルを持っているスピードアップブーストIOストリームと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%を占めており、これをもっと速くする必要があります。どんな提案も大歓迎です。

答えて

3

圧縮解除を高速化する唯一の方法は、圧縮データを小さくすることです。そのため、処理するのが少なくなります。つまり、その時間の処理時間が心配されていないと仮定して、圧縮にもっと時間を費やすことを意味します。つまり、最良の圧縮を選択します。

1

少なくとも、Windowsではzlib Cインターフェイスを使用して20%の改善が測定されました。詳細なプロファイリングの後、boost :: iostreams :: filtering_streambuf &のiostreamオーバーヘッドが主な違いでした。