如何解决 Android 上的 XML 解析性能问题 [英] How to solve the XML parsing performance issue on Android

查看:20
本文介绍了如何解决 Android 上的 XML 解析性能问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我必须在 Android 上读取大约 4000 行的 XML 文件.首先,我尝试了 可在 github 中找到,讨论 这里.

2016 年 3 月 18 日更新

好的,已经快 4 年了,世界已经在前进.我终于有时间重新运行测试:

  1. 运行 Android 4.1.2 的三星 Galaxy S3
  2. 运行 Android 4.4.4 的 Nexus7 (2012)
  3. 运行 Android 6.0.1 的 Nexus5

在 Android 4.4.4 和 Android 6.0.1 之间,情况发生了翻天覆地的变化,我们有了一个新的赢家:以超过 SAX 两倍的吞吐量提取解析 FTW.不幸的是,我不知道此更改的确切时间,因为我没有任何运行 Android > 4.4.4 和 < 的设备.6.0.1.

Android 4.1.2:

Android 4.4.4:

Android 6.0.1:

I have to read a XML file with about ~4000 lines on Android. First I tried the SimpleXML library because it's the easiest and it took about 2 minutes on my HTC Desire. So I thought maybe SimpleXML is so slow because of reflection and all the other magic that this library uses. I rewrote my parser and used the built-in DOM parsing method with some special attention for performance. That helped a bit but it still took about 60 seconds which is still totally unacceptable. After a bit of research I found this article on developer.com. There are some graphs that show that the other two available methods - the SAX parser and Android's XML Pull-Parser - are equally slow. And at the end of the article you'll find the following statement:

The first surprise I had was at how slow all three methods were. Users don't want to wait long for results on mobile phones, so parsing anything more than a few dozen records may mandate a different method.

What might be a "different method"? What to do if you have more than "a few dozen records"?

解决方案

Original answer, in 2012

(note: make sure you read the 2016 update below!)

I just did some perf testing comparing parsers on Android (and other platforms). The XML file being parsed is only 500 lines or so (its a Twitter search Atom feed), but Pull and DOM parsing can churn through about 5 such documents a second on a Samsung Galaxy S2 or Motorola Xoom2. SimpleXML (pink in the chart) as used by the OP ties for slowest with DOM parsing.

SAX Parsing is an order of magnitude faster on both of my Android devices, managing 40 docs/sec single-threaded, and 65+/sec multi-threaded.

Android 2.3.4:

The code is available in github, and a discussion here.

Update 18th March 2016

OK, so its been almost 4 years and the world has moved on. I finally got around to re-running the tests on:

  1. A Samsung Galaxy S3 running Android 4.1.2
  2. A Nexus7 (2012) running Android 4.4.4
  3. A Nexus5 running Android 6.0.1

Somewhere between Android 4.4.4 and Android 6.0.1 the situation changed drastically and we have a new winner: Pull Parsing FTW at more than twice the throughput of SAX. Unfortunately I don't know exactly when this change arrived as I don't have any devices running Android > 4.4.4 and < 6.0.1.

Android 4.1.2:

Android 4.4.4:

Android 6.0.1:

这篇关于如何解决 Android 上的 XML 解析性能问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆