我想寫一些應用程序,執行數據分析,存儲在相當大的XML文件(從10到800MB)。每組數據都存儲爲單個標籤,具體數據被指定爲attrobutes。我現在從HaXml中獲得了saxParse,並且在使用它的時候對內存使用情況不滿意。在解析15Mb XML文件時,它會消耗超過1Gb的內存,儘管我試圖不將數據存儲在列表中,並立即進行處理。我用下面的代碼:Haskell的哪個XML解析器?
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」 - 程序,執行一些IO動作 - 輸出到屏幕,存儲在數據庫中,等等。
如何在XML解析期間減少內存消耗?切換到另一個XML解析器有幫助嗎?
更新:哪個解析器支持不同的輸入編碼 - utf-8,utf-16,utf-32等?