2013-06-20 40 views
2

我用Java使用不同的解析器解析器X(XOM)和解析器Y(DOM)編寫了相同的XML解析算法。我將代碼嵌入到200萬次循環中以模擬我需要執行的操作數量,並使用Java Profiler監視性能。測量如下所示。XML解析性能DOM與XOM

     Parser X (XOM)      Parser Y (DOM) 

Heap Memory    6.82         7.9 
Non-heap memory   14         15 
Garbage Collector  617 collections \ 2 sec    523 collections \ 1 sec 
Up time     1 m 53 s        1 m 54 s  
CPU time     1 m 2 s        44.8 s 

我有幾個問題。

  1. 如果我想處理大約200萬個大小達到100 MB的XML,該怎麼辦?哪一個更好,以獲得更好的性能。性能是以時間來衡量的(無論機器利用率如何,我都有更快的處理所有XML的機器,因爲我有專門的機器來處理這個過程)。簡而言之,內存VS CPU時間VS正常運行時間更長

  2. 利用完整的CPU電源可以更快完成嗎?多線程?

  3. 如果我想測量性能。我應該使用CPU時間還是使用時間。我知道CPU時間是CPU專用於完成該過程的時間,而上升時間是機器完成該過程所花費的總時間?

  4. 爲什麼Parser Y與Parser X的時間相同,但CPU時間要低得多,儘管事實上這個測量並不是單次運行的結果。

  5. 是否可以使Parser Y的運行時間縮短,以便CPU時間性能的差異反映在現實生活中。

+0

您是否試圖獲得最佳性能?那麼它可能不是dom,或者是xom,它是vtd-xml –

回答

1

在擴展了兩種算法的代碼以涵蓋各種操作之後,事實證明,XOM解析器在相同的CPU時間和較低的內存佔用情況下,運行時間快得多。 XOM解析器爲我贏得勝利。

+1

你提供的兩個選擇中最快的結論可能是正確的,但它似乎不是一個好的選擇對於有意讀取數百萬文件的人。根據我在「XON.nu」中看到的內容(如果這確實是您使用的XOM),我懷疑它可能會影響定製XML讀取器的性能。您是否檢查過XMLBooster的「基準」數字? –

2

如果您想要快速處理XML,您應該使用一種工具,它將直接從您的模式生成一個自定義XML讀取器。這些避免了DOM的一般開銷。他們還傾向於爲您的應用程序提供對特定XML內容的直接訪問API,包括以自然方式表示的數據(例如,實數數據的浮點數而不是文本字符串)。

這裏有幾個:

我對這些工具沒有具體的經驗。 (爲了內部目的,我寫了其中一個)。

+0

謝謝你Ira的寶貴意見:) – mowienay