why is this bzip2 boost code so slow?
Hello,
This code with bzip2 takes 185 seconds to do 10000 iterations of compressing
and uncompressing. This seems way too high. When I replace the bzip2 code
with zlib code it take roughly 7 seconds. Anyone know what might be wrong?
#include <iostream>
#include <sstream>
#include
ChristinaDRS wrote:
Hello,
This code with bzip2 takes 185 seconds to do 10000 iterations of compressing and uncompressing. This seems way too high. When I replace the bzip2 code with zlib code it take roughly 7 seconds. Anyone know what might be wrong?
[...]
int main() { TimeType start_time = current_time(); string compressed, received_data; boost::iostreams::filtering_streambufboost::iostreams::output out, in; const string send_data = "boo! how are you?";
for(int i = 0; i < 10000; ++i) { //compress out.push(boost::iostreams::bzip2_compressor()); out.push(boost::iostreams::back_inserter(compressed)); boost::iostreams::copy(boost::make_iterator_range(send_data), out); const string compressed1=compressed; //decompress received_data = decompress(compressed); } cout << "time elapsed: " << elapsed_seconds(start_time) << endl; }
Isn't this line a bit of a problem?
out.push(boost::iostreams::back_inserter(compressed));
Basically, with each iteration you add more data to the string "compressed". I can't tell you why zip is so much faster, but I guess it somehow ignores the additional bytes where bzip doesn't. I also think the previous line should not be inside the for-loop. Not sure about the effect, though. I am a bit surprised that it doesn't die with an exception. With the main function below, I have 10000 iterations in less than a second on my old machine :-) <snip> int main() { TimeType start_time = current_time(); string compressed, received_data; boost::iostreams::filtering_streambufboost::iostreams::output out, in; const string send_data = "boo! how are you?"; out.push(boost::iostreams::bzip2_compressor()); for(int i = 0; i < 10000; ++i) { compressed.clear(); //compress out.push(boost::iostreams::back_inserter(compressed)); boost::iostreams::copy(boost::make_iterator_range(send_data), out); //decompress received_data = decompress(compressed); } cout << "time elapsed: " << elapsed_seconds(start_time) << endl; } </snip> Regards, Roland
participants (2)
-
ChristinaDRS
-
Roland Bock