簡體   English   中英

使用SimpleXML庫的XML - Android上的性能

[英]XML With SimpleXML Library - Performance on Android

我正在使用Simple XML庫來處理Android應用程序中的XML文件。 這些文件可以變得非常大 - 大約1Mb,並且可以非常深入地嵌套,因此它們相當復雜。

當應用程序通過Simple API加載其中一個文件時,最多可能需要30秒才能完成。 目前我正在將FileInputStream傳遞給Simple的Persister類的[read(Class,InputStream)] [2]方法。 實際上,它只讀取XML節點並將數據映射到模型對象的實例,從而在內存中復制XML樹結構。

我的問題是如何改善Android的性能? 我目前的想法是將文件的內容讀入字節數組,並將ByteArrayInputStream傳遞給Persister的read方法。 我想處理文件的時間會更快,但我不確定節省的時間是否會被首先讀取整個文件所花費的時間所抵消。 內存限制也可能是一個問題。

這是傻瓜差事嗎? 在這種情況下,我還能做些什么來提高性能嗎? 如果不是,我將不得不求助於改進用戶對加載文件的進度的反饋。

一些警告:

1)我無法更改我正在使用的XML庫 - 有問題的代碼是在桌面,移動和Web應用程序中使用的“引擎”的一部分。 改變它的開銷對於時間來說太過分了。

2)數據文件由用戶創建,因此我無法控制嵌套的大小/深度。

好吧,你可以做很多事情來改善這一點。 他們來了。

1)在Android上你應該至少使用2.5.2版本,但理想情況下是2.5.3,因為它使用KXML,它在Android上更快,內存效率更高。

2)Simple將動態構建對象圖,這意味着它將需要加載尚未加載的類,並使用反射基於其注釋為每個類構建模式。 因此,首次使用將始終是最昂貴的。 重復使用相同的persister實例將快許多倍。 所以盡量避免多個persister實例,如果可能的話只使用一個。

3)嘗試測量直接讀取文件所用的時間,而不使用Simple XML庫。 多久時間? 如果它需要永遠,那么你知道這里的性能是由於文件系統。 嘗試使用BufferedInputStream來提高性能。

4)如果您仍然發現任何問題,請在郵件列表中提出。

編輯: Android在注釋處理方面存在一些問題https://code.google.com/p/android/issues/detail?id=7811 ,簡單的2.6.6修復已針對這些問題實施了解決方法。 可以觀察到性能提高10倍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM