Oldukça büyük XML dosyalarında (10'dan 800MB'a kadar) saklanan verilerin analizini gerçekleştiren bir uygulama yazmaya çalışıyorum. Her bir veri seti, attrobutes olarak belirtilen somut verilerle tek etiket olarak saklanır. Şu anda HaXml'den saxParse kullanıyorum ve onunla çalışırken bellek kullanımından memnun değilim. Listelerde veri saklamamaya ve hemen işlemeye çalışmamıza rağmen, 15Mb XML dosyasının ayrıştırılmasıyla 1Gb'den fazla bellek tüketiyor. Kod aşağıdaki kullanmaktadır:Haskell için hangi XML ayrıştırıcı?
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"))
burada 'proc - kayda özelliklere veri dönüşüm gerçekleştirir prosedürü, ve 'ioproc' - bazı ES eylemi gerçekleştirir prosedürü, - veri tabanında depolanması, ekran çıktısı, vb.
XML ayrıştırma işlemi sırasında bellek tüketimini nasıl azaltabilirim? Başka bir XML ayrıştırıcı yardımına geçmeli mi?
Güncelleme: ve hangi ayrıştırıcı farklı giriş kodlamaları için destekliyor - utf-8, utf-16, utf-32, vs.?