मैं कुछ एप्लिकेशन लिखने की कोशिश कर रहा हूं, जो डेटा की विश्लेषण करता है, जो बहुत बड़ी एक्सएमएल फाइलों में संग्रहीत होता है (10 से 800 एमबी तक)। डेटा के प्रत्येक सेट को एकल टैग के रूप में संग्रहीत किया जाता है, जिसमें ठोस डेटा को एट्रोब्यूट्स के रूप में निर्दिष्ट किया जाता है। मैं वर्तमान में HaXml से saxParse हूं, और मैं इसके साथ काम के दौरान स्मृति उपयोग से संतुष्ट नहीं हूं। 15 एमबी एक्सएमएल फ़ाइल के पार्सिंग पर यह 1 जीबी से अधिक मेमोरी का उपभोग करता है, हालांकि मैंने सूचियों में डेटा स्टोर नहीं करने की कोशिश की और इसे तुरंत संसाधित किया। मैं कोड निम्न का उपयोग करें:हास्केल के लिए कौन सा एक्सएमएल पार्सर?
importOneFile file proc ioproc = do
xml <- readFile file
let (sxs, res) = saxParse file $ stripUnicodeBOM xml
case res of
Just str -> putStrLn $ "Error: " ++ str;
Nothing -> forM_ sxs (ioproc . proc . (extractAttrs "row"))
जहां 'proc' - प्रक्रिया, कि रिकॉर्ड में गुण से डेटा का रूपांतरण करता है, और 'ioproc' - प्रक्रिया, कुछ आईओ कार्रवाई कि निष्पादित करता है - स्क्रीन पर उत्पादन, डेटाबेस में संग्रहीत करने, आदि
एक्सएमएल पार्सिंग के दौरान मैं मेमोरी खपत कैसे कम कर सकता हूं? किसी अन्य एक्सएमएल पार्सर में स्विच करना चाहिए?
अद्यतन: और कौन सा पार्सर विभिन्न इनपुट एन्कोडिंग के लिए समर्थन करता है - utf-8, utf-16, utf-32, आदि?