2012-12-10 26 views
5

Tôi có một tập tin lớn dữ liệu tôi đã nén với zlib sử dụng IOStream tăng và bộ đệm dòng lọc:Boost IO Stream và ZLib tăng tốc độ

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

Đối với tốc độ tôi đang khởi tạo thư viện zlib như sau:

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 của tôi trông như thế này:

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

câu hỏi của tôi là đang có một ny cách tôi có thể tăng tốc độ hoạt động thổi phồng (giải nén)? Hiện tại, quá trình nén chiếm khoảng 83% thời gian truy cập dữ liệu của tôi và tôi thực sự cần nhanh hơn. Bất kỳ đề xuất sẽ được đánh giá rất cao.

Trả lời

3

Cách duy nhất để tăng tốc độ giải nén là làm cho dữ liệu nén nhỏ hơn, do đó, nó có ít tiến trình hơn. Điều đó có nghĩa là chi tiêu thêm thời gian nén, giả sử rằng bạn không quan tâm đến thời gian xử lý ở cuối đó. Vì vậy, bạn sẽ chọn nén tốt nhất.

1

Ít nhất là trên Windows, chúng tôi đã cải thiện 20% bằng giao diện zlib C. Sau khi đóng hồ sơ nó bật ra rằng tăng :: iostreams :: filtering_streambuf & iostream overhead là sự khác biệt chính.

Các vấn đề liên quan