好吧,现在让我们开始比较所有这些库!
应用XML解析器的性能比较
苹果公司已经作出了出色的代码示例调用XMLPerformance,让您所花费的时间比较分析一个?900KB的XML文件,其中前300的iTunes同时与NSXML libxml2的宣传短片和歌曲。
该示例允许您选择一个分析方法,然后分析该文件,并就如何保持长时间才下载的文件,并解析数据库中的文件的统计。 然后,您可以到屏幕上看到一个统计,平均每个方法下载和解析时间。
我认为这将是一个理想的方法来测试各种API如何相互执行,使我扩大了样本,以包括上述图书馆。 你可以下载下面如果您想尝试它在您的设备更新项目。 它也可作为如何使用上述API的每个好例子!
下载更新XMLPerformance项目
关于该项目的说明:如果库中包含XPath的支持,我用一个单一的查找它,因为我觉得它代表了该图书馆将在实践中使用的方式。 但当然XPath是一般较手动通过树走的更慢,所以增加了对这些图书馆的基准。
因此,无论如何 - 我将讨论如何执行情况与样本上写我的设备这里,是结果 - 但随时给它一个在您的设备,或者调整对实际的XML数据,你需要的代码镜头解析!
XML解析器的性能比较
下面是一些图,显示了如何快速解析各种解析器对我的设备(1部3G版iPhone的XML文档):
正如你可以在这里看到,NSXMLParser是迄今为止最慢的方法。 TBXML是最快的,这是有道理的,因为很多功能被剔除,以优化只读解析时间。
我很惊讶,但是,看到TBXML和其他一些DOM的解析方法进行速度比的libxml2的SAX解析器,我原以为将是最快的方法所有。 我没有异型,但以我的猜测为什么它是慢,因为经常需要比较字符串中的SAX解析方法的文件。
但是,不要在这个折扣的图表看的libxml2的SAX方法。 请记住,libxml2的是这些方法,可以分析该文件,因为它的阅读中,只有1 - 因此它可以让你的程序立刻开始显示数据而不是让下载排名榜首。
好吧,这里有一个图表,显示由解析器高峰内存使用(这是通过运行通过对象分配工具的各种方法获得):
请注意,DOM方法通常需要更多的内存比SAX的方法与TBXML,这确实是相当有效的异常(开销)。 这是值得考虑当您正在处理的,特别是大文件,得出了一个iPhone的内存限制。
此外请注意的libxml2的SAX的方法是最好的选择,因为据峰值内存使用量而言(我怀疑它的规模比其他人的声音)。
最后,让我们的总结与概括的图表分析器之间的一切,我们已经讨论了上述的差异:
NSXMLlibxml2的 - 的SAXTBXMLTouchXMLKissXMLTinyXML的GDataXMLlibxml2的 - 的DOM
包含在SDK的?是的是的没有没有没有没有没有是的
秒的时间解析1.871.190.681.11.371.271.070.84
峰值内存使用3.113.013.076.55.254.84.154.97
解析而下载?没有是的没有没有没有没有没有没有
编辑/保存XML?没有没有没有没有是的是的是的是的
XPath的支持?没有没有没有是的是的是*是的是的
C或的OBJ - C的的OBJ - C的ç的OBJ - C的的OBJ - C的的OBJ - C的ç的OBJ - C的ç
牌照苹果麻省理工学院麻省理工学院麻省理工学院麻省理工学院了ZLib阿帕奇麻省理工学院
*与TinyXPath =