2012-12-10 18 views
5

I artırmak IOStreams ve filtreleme akışı tamponlar kullanılarak Zlib ile sıkıştırılmış verilerin büyük dosya hızlandırmakKuvvetlendirme IO Akış ve 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)); 

Benim açıcı şöyle görünür:

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)); 

sorum orada bir olduğunu ny yolu, şişirmeyi (dekompresyon) hızlandırabilir miyim? Şu anda sıkıştırma veri erişim süremin yaklaşık% 83'ünü alıyor ve gerçekten bunu daha hızlı almam gerekiyor. Herhangi bir öneri çok takdir edilecektir.

cevap

3

Sıkıştırma işlemini hızlandırmanın tek yolu, sıkıştırılmış verileri daha küçük yapmaktır, bu nedenle daha az işlemesi vardır. Bu, o zamandaki işlem süresiyle ilgili olarak endişe duymadığınızı varsayarak, daha fazla zaman harcamak demektir. Böylece en iyi sıkıştırmayı seçersiniz.

1

En azından Windows'da zlib C arabirimini kullanarak% 20 iyileştirme gerçekleştirdik. Yakın profil oluşturulduktan sonra, bu bo iostreams :: filtering_streambuf & iostream yükünün ana fark olduğu ortaya çıktı.