2009-06-29 11 views
8

यदि प्रदर्शन एक मुद्दा है तो क्या मुझे एएससीआई/टेक्स्ट सीरियलाइजेशन पर बाइनरी सीरियलाइजेशन पसंद करना चाहिए?बूस्ट सीरियलाइजेशन प्रदर्शन: टेक्स्ट बनाम बाइनरी प्रारूप

क्या किसी ने इसे बड़ी मात्रा में डेटा पर परीक्षण किया है?

+0

दिलचस्प विषय। इसे पढ़ें: http://stackoverflow.com/questions/4558382/boostserialization-high-memory-consumption-during-serialization –

उत्तर

13

मैं स्मृति आकार में साथ मैट्रिक्स और वैक्टर देखने टेबल और कुछ मेटा डेटा (तार) का प्रतिनिधित्व स्टोर करने के लिए प्रयोग किया जाता है boost.serialization लगभग 200 एमबीटीई। डिस्क से मेमोरी में लोड करने के लिए आईआईआरसी WinXP पर बाइनरी आर्काइव का उपयोग करके पाठ संग्रह बनाम 4 सेकंड के लिए 3 मिनट लग गए।

+0

3 मिनट लगता है ... अस्पष्ट रूप से धीमा। वे पीओडी प्रकार नहीं थे :) – sehe

1

ने इसे एक बड़ी कक्षा को लोड करने में शामिल एक समस्या के लिए बेंचमार्क किया जिसमें घोंसले वाले संग्रहीत कक्षाओं के बहुत सारे (हजारों) शामिल हैं।

प्रारूप बदलने के लिए, उपयोग संग्रह धाराओं

boost::archive::binary_oarchive 
boost::archive::binary_iarchive 
बजाय

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

(बाइनरी) संग्रह लोड करने के लिए कोड लगता है:

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

फ़ाइलें और उपरोक्त कोड स्निपेट के एक अनुकूलित जीसीसी निर्माण के लिए walltimes हैं:

  • ascii: 820MB (100%), 32.2 सेकंड (100%)।
  • बाइनरी: 620 एमबी (76%), 14.7 सेकंड (46%)।

यह एक ठोस राज्य ड्राइव से है, बिना किसी स्ट्रीम संपीड़न के।

तो गति में लाभ फ़ाइल आकार से बड़ा होगा, और आपको बाइनरी का उपयोग करके अतिरिक्त बोनस मिलता है।

संबंधित मुद्दे