gpt4 book ai didi

xml - Haskell解析低内存的大xml文件

转载 作者:数据小太阳 更新时间:2023-10-29 01:49:39 24 4
gpt4 key购买 nike

因此,我使用了几个 Haskell XML 库,包括 hexpat 和 xml-enumerator。在阅读了 Real World Haskell (http://book.realworldhaskell.org/read/io.html) 中的 IO 章节后,我的印象是,如果我运行以下代码,它将在我执行它时被垃圾收集。

但是,当我在一个大文件上运行它时,内存使用率在运行时不断攀升。

runghc parse.hs bigfile.xml

我做错了什么?我的假设错了吗?映射/过滤器是否强制它评估所有内容?

import qualified Data.ByteString.Lazy as BSL
import qualified Data.ByteString.Lazy.UTF8 as U
import Prelude hiding (readFile)
import Text.XML.Expat.SAX
import System.Environment (getArgs)

main :: IO ()
main = do
args <- getArgs
contents <- BSL.readFile (head args)
-- putStrLn $ U.toString contents
let events = parse defaultParseOptions contents
mapM_ print $ map getTMSId $ filter isEvent events

isEvent :: SAXEvent String String -> Bool
isEvent (StartElement "event" as) = True
isEvent _ = False

getTMSId :: SAXEvent String String -> Maybe String
getTMSId (StartElement _ as) = lookup "TMSId" as

我的最终目标是用一个类似 sax 的简单界面来解析一个巨大的 xml 文件。我不想知道整个结构才能收到我发现“事件”的通知。

最佳答案

我是 hexpat 的维护者。这是一个错误,我现在已经在 hexpat-0.19.8 中修复了。感谢您提请我注意。

这个错误是 ghc-7.2.1 上的新错误,它与我没想到的绑定(bind)到三元组的 where 子句和 unsafePerformIO 之间的交互有关,我需要与 C 代码进行交互在 Haskell 中显得很纯粹。

关于xml - Haskell解析低内存的大xml文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8067139/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com