【发布时间】:2010-11-06 02:15:48
【问题描述】:
我正在尝试编写一些应用程序,它执行数据分析,存储在相当大的 XML 文件中(从 10 到 800MB)。每组数据都存储为单个标签,具体数据指定为属性。我目前是来自 HaXml 的 saxParse,我对使用它时的内存使用不满意。在解析 15Mb XML 文件时,它消耗超过 1Gb 的内存,尽管我试图不在列表中存储数据,并立即处理它。我使用以下代码:
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 等?
【问题讨论】: