我一直在使用DOM很長一段時間,因爲這樣的DOM解析性能方面已經很不錯了。即使在處理大約4-7 MB的XML時,解析速度也很快。我們面對DOM的問題是一旦我們開始處理大型XML時,內存佔用就會變得巨大。Stax和DOM解析之間的性能差異
最近,我嘗試轉向Stax(Streaming parsers for XML),它們被認爲是第二代解析器(閱讀關於Stax它說它是現在最快的解析器)。當我嘗試使用大型XML的Stax解析器時,大約4MB的內存佔用量明顯減少了,但是花費時間解析整個XML並創建了java對象,使其增加了將近5倍的DOM。
我使用了Stax的sjsxp.jar實現。
我可以從邏輯上推論,由於流解析器的流式性質,性能可能不是非常好,但會減少5次(例如,DOM需要大約8秒才能爲此XML構建對象,而Stax解析需要平均40秒)肯定不會被接受。
我錯過了一些點在這裏完全因爲我無法知道如何面對這些性能數據愚見的speed/memory tradeoff
你能否提供更多細節?你用什麼算法來消耗你的XML和DOM,以及你用什麼算法來消費StAX事件?根據我的經驗,編寫代碼來消費StAX事件比較困難,但性能始終優於DOM。 – dimitarvp 2010-03-26 12:22:22
您是使用遊標API還是事件迭代器API? – carlsborg 2010-08-05 13:29:13
我強烈建議使用合適的分析器來查找瓶頸,否則您會花費年齡追逐野蠻的猜測。 – skaffman 2010-08-30 17:31:20