2012-12-10 13 views
5

मैं डेटा मैं बढ़ावा IOStreams और छानने धारा बफर का उपयोग कर zlib के साथ संकुचित है की एक बड़ी फ़ाइल है:बूस्ट आईओ स्ट्रीम और zlib में तेजी लाने के

boost::iostreams::array_source uncompressedArray(reinterpret_cast< const char* >(&uncompressedData[0]), uncompressedData.size()); 

boost::iostreams::filtering_streambuf<boost::iostreams::output> out; 
out.push(*m_compressor); 
out.push(boost::iostreams::char_back_inserter(compressedData)); 
boost::iostreams::copy(uncompressedArray, out); 

गति के लिए मैं निम्नलिखित के साथ 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)); 

मेरे decompressor इस तरह दिखता है:

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

मेरा प्रश्न हैं वहाँ एक है एनई तरीके मैं inflate (decompress) ऑपरेशन तेज कर सकते हैं? अभी संपीड़न मेरे डेटा एक्सेस समय का लगभग 83% ले रहा है और मुझे वास्तव में इसे तेज़ी से प्राप्त करने की आवश्यकता है। किसी भी सुझाव के लिए बहुत आभार होगा।

उत्तर

3

डिकंप्रेशन को गति देने का एकमात्र तरीका संपीड़ित डेटा को छोटा बनाना है, इसलिए इसकी प्रक्रिया कम है। इसका मतलब यह है कि आप उस अंत में प्रसंस्करण समय के बारे में चिंतित नहीं हैं, यह समझते हुए अधिक समय बिताते हुए। तो आप सबसे अच्छा संपीड़न का चयन करेंगे।

1

कम से कम विंडोज़ पर हमने zlib सी इंटरफ़ेस का उपयोग करके 20% सुधार मापा। करीबी प्रोफाइलिंग के बाद यह पता चला कि बूस्ट :: iostreams :: filtering_streambuf & iostream ओवरहेड मुख्य अंतर था।