2012-02-09 8 views
1

私は現在、私のプロジェクトの1つで圧縮のためにzlibを使用しようとしています。私は基本的なzlib tutorialで見ていたし、私は次の文で混乱しています:zlibとバッファーサイズ

CHUNKは、単にzlibのルーチンからのデータ のにデータを供給し、引っ張るためのバッファ・サイズです。特にinflate()の場合は、バッファサイズを大きくするほど効率が良くなります。 メモリが使用可能な場合、バッファサイズは になり、128Kまたは256Kバイトのオーダーを使用する必要があります。

の#define CHUNK私はいつも(80バイト程度)の出力端ですでに利用可能な小さなバッファを持つことになりますし、継続的に入力から非常に小さなデータ(数バイト)を送ります私の場合は16384

横からzlib。これはどちらの側にも大きなバッファを持たないことを意味しますが、私はもっと小さなものを使うつもりです。

しかし、 "より大きなバッファサイズがより効率的になる"と解釈する方法がわかりません。これは、エンコーディングや時間/空間効率の効率性を指していますか?

私はこの状況を改善するために、バッファリングのいくつかのレイヤーを追加して、入力から蓄積し、出力に繰り返しフラッシュしていたはずです。しかし、これは私がデータを蓄積し、私のデータにいくつかのレベルのコピーを加えなければならないことを意味します。

効率が単に時間/空間効率を参照している場合、私は両方の方法の影響を測定し、使用することを決定することができます。しかし、実際のエンコーディングが小さなバッファサイズの影響を受ける可能性がある場合、これは本当に検出しにくいかもしれません。

非常に小さなバッファでzlibを使用する経験がある人はいますか?

答えて

5

時間効率を意味します。大規模な入出力バッファを膨らませると、より高速のインフレコードが内部的に使用されます。それはあなたが好きなように小さい(1のサイズさえも)バッファでうまく動作しますが、遅くなります。

入力を蓄積し、それをより大きなチャンクで膨らませることは価値があります。より大きな出力バッファを用意する必要もあります。