大きな(300-1000mb)xmlファイルを処理できるhaskellライブラリを検索したところ、hexpatが見つかりました。私は/dev/null
に出力をリダイレクトし、それを300メガバイトのファイルを投げてきたテストのためにxmlドキュメントをhexpatで処理する方法を教えてください。
-- Process document before handling error, so we get lazy processing.
に主張はHaskellウィキにan exampleがあります。メモリ消費量は、プロセスを終了するまで増加し続けました。機能は現在、一定のメモリを使用してその結果
process :: String -> IO()
process filename = do
inputText <- L.readFile filename
let (xml, mErr) = parse defaultParseOptions inputText :: (UNode String, Maybe XMLParseError)
hFile <- openFile "/dev/null" WriteMode
L.hPutStr hFile $ format xml
hClose hFile
return()
:
は、今私がprocess
関数からエラー処理を削除しました。エラー処理の結果、大量のメモリが消費されるのはなぜですか?
xml
とmErr
は、parse
の呼び出し後、2つの別々の評価されていないサンクです。 format xml
はxml
を評価し、 'mErr'の評価ツリーを構築しますか?はいの場合は、一定のメモリを使用している間にエラーを処理する方法はありますか?
http://www.haskell.org/haskellwiki/Hexpat/
十分な評判を持つ人がこの質問に 'hexpat'タグを追加してもらえますか? – fho
完了 - 1年以上経過しています。 –