2009-06-29 7 views

Odpowiedz

13

użyłem boost.serialization do przechowywania matryc i wektory reprezentujących tabele odnośników i niektórych metadanych (ciągi) o wielkości pamięci około 200 MB. IIRC do ładowania z dysku do pamięci trwało 3 minuty dla archiwum tekstowego w porównaniu do 4 sekund przy użyciu archiwum binarnego na WinXP.

+0

3 minuty brzmią ... niewytłumaczalnie wolno. To nie były typy POD :) – sehe

1

Test porównawczy dla problemu związanego z ładowaniem dużej klasy zawierającej partie (tysiące) zagnieżdżonych klas zarchiwizowanych.

Aby zmienić format, archiwum wykorzystanie strumieni

boost::archive::binary_oarchive 
boost::archive::binary_iarchive 

zamiast

boost::archive::text_oarchive 
boost::archive::text_iarchive 

Kod do ładowania (binarne) archiwum wygląda następująco:

std::ifstream ifs("filename", std::ios::binary); 
boost::archive::binary_iarchive input_archive(ifs); 
Class* p_object; 
input_archive >> p_object; 

plików i walltimes dla zoptymalizowanej wersji gcc powyższego fragmentu kodu to:

  • ASCII: 820MB (100%), 32,2 minut (100%).
  • binarny: 620MB (76%), 14,7 sekund (46%).

Pochodzi z dysku SSD, bez kompresji strumienia.

Zwiększenie prędkości jest większe niż sugerowałby rozmiar pliku, a otrzymasz dodatkowy bonus za pomocą binarnego.

Powiązane problemy