[转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml
转自:http://www.itdaan.com/blog/2017/02/20/301ad47832f4.html
由于windows环境下测试不稳定,博主选择在linux下进行的测试!
Qt - QDomDocument
#include <QtCore/QCoreApplication>
#include <qdom.h>
#include <QFile>
#include <QIODevice>
#include <iostream>
#ifdef Q_OS_WIN
# include <Windows.h>
#else
# include <sys/time.h>
#endifusing std::cout;
using std::endl;#define TEST_TIMES 10int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);#ifdef Q_OS_WIN //< windowslong tStart = 0;long tEnd = 0;LARGE_INTEGER nFreq;LARGE_INTEGER nStartTime;LARGE_INTEGER nEndTime;double time = 0.;QueryPerformanceFrequency(&nFreq);QFile file( "D:/DriverConfig.xml" );QDomDocument doc;for( int i = 0; i < TEST_TIMES; ++i ){doc.clear();//< step1 open fileif( !file.open(QIODevice::ReadOnly) ){cout << "failed to open file!" << endl;continue;}Sleep( 100 );QueryPerformanceCounter(&nStartTime); //< step2 set contentif( !doc.setContent(&file) ){cout << "Failed to read xml file!" << endl;}QueryPerformanceCounter(&nEndTime);time = (double)(nEndTime.QuadPart-nStartTime.QuadPart) / (double)nFreq.QuadPart * 1000.; //< mscout << " seting content costs " << time << "ms" << endl;file.close();Sleep( 100 );}#else //< LINUXtimeval starttime, endtime;QFile file( "/home/liuyc/DriverConfig.xml" );QDomDocument doc;double timeuse = 0.;double timeAverage = 0.;for( int i = 0; i < TEST_TIMES; ++i ){doc.clear();//< step1 open fileif( !file.open(QIODevice::ReadOnly) ){cout << "failed to open file!" << endl;continue;}sleep( 1 ); //< delay for 1sgettimeofday( &starttime, 0 );//< step2 set contentif( !doc.setContent(&file) ){cout << "Failed to read xml file!" << endl;continue;}gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;timeAverage += timeuse;cout << " reading files costs : " << timeuse << "ms" << endl;file.close();sleep( 1 ); //< delay for 1s}timeAverage /= TEST_TIMES;cout << " The End *****************\n average costs = " << timeAverage << "ms" << endl; #endifreturn a.exec();
}
TinyXml-2
#include <iostream>
#include "tinyxml2.h"
#ifdef _WIN32
#include <Windows.h>
#else
#include <sys/time.h>
#endif
using namespace tinyxml2;
using std::cout;
using std::endl;#define TEST_TIMES 10int main()
{
#ifndef _WIN32 //< linux ------------------------------------------------tinyxml2::XMLDocument doc;timeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;for( int i = 0; i < TEST_TIMES; ++i ){gettimeofday( &starttime, 0 );if( XML_SUCCESS != doc.LoadFile( "/home/liuyc/DriverConfig.xml" ) ){cout << "failed in load xml file! _ " << i << endl;continue;}gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n the average costs = " << timeAverage << "ms" << endl;#else //< windows ---------------------------------------------------LARGE_INTEGER nFreq;LARGE_INTEGER nStartTime;LARGE_INTEGER nEndTime;double time = 0.;QueryPerformanceFrequency(&nFreq);tinyxml2::XMLDocument doc;for( int i = 0; i < TEST_TIMES; ++i ){QueryPerformanceCounter(&nStartTime); if( XML_SUCCESS != doc.LoadFile( "D:/DriverConfig.xml" ) ){cout << "failed in load xml file! _ " << i << endl;continue;}QueryPerformanceCounter(&nEndTime);time = (double)(nEndTime.QuadPart-nStartTime.QuadPart) / (double)nFreq.QuadPart * 1000.; //< mscout << " reading files costs : " << time << "ms" << endl;}cout << endl;system("pause");#endif //< end of windows ---------------------------------------------------return 0;
}
RapidXml
RapidXml版本: 1.13
#include <iostream>
#include "rapidxml.hpp"
#include "rapidxml_print.hpp"
#include "rapidxml_utils.hpp"
#ifdef _WIN32
# include <Windows.h>
#else
# include <sys/time.h>
#endifusing namespace rapidxml;
using std::cout;
using std::endl;#define TEST_TIMES 10int main()
{
#ifdef _WIN32 //< windowsLARGE_INTEGER nFreq;LARGE_INTEGER nStartTime;LARGE_INTEGER nEndTime;double time = 0.;QueryPerformanceFrequency(&nFreq);//< parse xmlfor( int i = 0 ; i < TEST_TIMES; ++i ){rapidxml::file<> filename( "D:/DriverConfig.xml" );xml_document<> doc;QueryPerformanceCounter(&nStartTime); doc.parse<0>( filename.data() );QueryPerformanceCounter(&nEndTime);time = (double)(nEndTime.QuadPart-nStartTime.QuadPart) / (double)nFreq.QuadPart * 1000.; //< mscout << " reading files costs : " << time << "ms" << endl;doc.clear();}system("pause");#elsetimeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;//< parse xmlfor( int i = 0 ; i < TEST_TIMES; ++i ){rapidxml::file<> filename( "/home/liuyc/DriverConfig.xml" );xml_document<> doc;gettimeofday( &starttime, 0 );doc.parse<0>( filename.data() );gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;doc.clear();timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n the average costs = " << timeAverage << "ms" << endl;#endifreturn 0;
}
PugiXml
#include <iostream>
#include "pugixml.hpp"
#include "pugiconfig.hpp"
#include <sys/time.h>
using namespace std;#define TEST_TIMES 10int main( void )
{pugi::xml_document doc;timeval starttime, endtime;double timeuse = 0.;double timeAverage = 0.;for( int i = 0; i < TEST_TIMES; ++i ){gettimeofday( &starttime, 0 );if( !doc.load_file( "/home/liuyc/DriverConfig.xml" ) ){cout << "failed in load xml file! _ " << i << endl;continue;}gettimeofday( &endtime, 0 );timeuse = 1000000. * (endtime.tv_sec - starttime.tv_sec) + endtime.tv_usec - starttime.tv_usec;timeuse *= 0.001 ;cout << " reading files costs : " << timeuse << "ms" << endl;timeAverage += timeuse;}timeAverage /= TEST_TIMES;cout << " \n** The end *******************\n the average costs = " << timeAverage << "ms" << endl;return 0;
}
总结
统计的时间如下(LINUX):
解析器 | 消耗时间(ms) | 效率倍数(相对Qt) |
---|---|---|
Qt-QDomDocument | 25.85 | 1 |
TinyXml2 | 6.64 | 3.89 |
RapidXml | 2.71 | 9.54 |
pugixml | 1.57 | 16.47 |
[转]xml解析工具的效率比较QDomDocument、TinyXml-2、RapidXml、PugiXml相关推荐
- Java XML解析工具 dom4j介绍及使用实例
Java XML解析工具 dom4j介绍及使用实例 dom4j介绍 dom4j的项目地址:http://sourceforge.net/projects/dom4j/?source=directory ...
- Java XML解析工具 JDOM介绍及使用实例
Java XML解析工具 JDOM JDOM介绍 JDOM是一种使用XML的独特Java工具包,用于快速开发XML应用程序. 它的设计包含Java语言的语法乃至语义. JDOM是一个开源项目,它基于树 ...
- 高效的Xml解析工具
前言 大家在工作中不知道有没有遇到过类似的情况: 1.需要写代码解析一个xml文件时,发现需要导入dom4j的jar包,一时又找不到,然后还得浪费几分钟时间去找jar包. 2.好不容易找到了jar包, ...
- Java XML解析工具类
Java XML解析工具类 Java解析XML的方式有很多,这里不一一说明了,利用三方jar包,实现了一个XML工具类 本身是有个需求,讲三方公司的XML请求文件中的Response里的属性赋值成ja ...
- java 之 xml 解析工具
java 解析 xml 文件 转载自 : http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/17/3082949.html 众所周知,现在解析X ...
- xml解析方式与效率对比
http://www.sqlite.com.cn/MySqlite/12/212.Html http://gatusso52.javaeye.com/blog/446100 方式 模型 原理 说明1 ...
- java xml开源操作类,xml解析和操作的开源工具项目涵盖java c++ php 等语言
XML解析器-Xerces XML操作库-dom4j XML文档解析器-Digester J2ME-的XML-解析器-kXML XML解析类库-MXP1 XML解析器-LibX ...
- 做一个项目,平时都用到哪些工具提高效率(上)
做一个项目,平时都用到哪些工具提高效率(上) 转载 做.NET 相关项目,Visual Studio 2008,SQL Server 2000/2005是标准的配置,但是,除此之外,还可以应用哪些工 ...
- 做一个项目,平时都用到哪些工具提高效率(上)[转]
做.NET 相关项目,Visual Studio 2008,SQL Server 2000/2005是标准的配置,但是,除此之外,还可以应用哪些工具来提高工作效率,让项目做的更轻松. 1 需要一个代 ...
最新文章
- python[外星人入侵] 项目
- AT+CSMP 设置短消息文本参数
- 《.NET 性能优化》送书活动结果公布
- BZOJ4589. Hard Nim
- uniapp框架之如何修改接口传参的参数
- java中abcd_java中请不要出现aBcd类似的变量名
- 判断小写字母 php,php中怎样推断字母是大写照样小写_后端开发
- 150904 高速公路 ccf
- umpy知识点补充:np.vstack()np.hstack()
- 【历史上的今天】5 月 2 日:首个 MySQL 公开版本发布;微软推出双键鼠标;美国门户网站改名
- 简单说from_tensor_slices()函数
- extjs3.0与extjs4.0区别
- 先进事迹计算机维护与维修,汽车维修工先进事迹
- mysql的group by语句不会产生_MySQL:为什么查询列表中多了它,GROUP BY语句就会报错呢?...
- android多个module打包aar,android 多module打包aar
- CVP0.M24、CVP0.M28、CVZ0.S08插装式单向阀
- 2021-2027全球与中国健身俱乐部和健身房管理软件市场现状及未来发展趋势
- 帅某---考研---高数笔记---汤家凤---第十一章无穷级数
- Scanner的nextLine()方法读不到数据的小坑
- python 打开dat格式_p4vasp分析态密度输出pdos数据后用Python分列
热门文章
- AI一分钟 | 特斯拉再融46亿;腾讯AI Lab宣布开源多标签图像数据集
- 又一届Google Cloud Next,李飞飞发布TPU 3.0,两大AutoML新品
- 一周AI回顾 | 特斯拉AI负责人说神经网络正在改变编程,机器学习大神Bengio新论文专注RNN优化
- 跨界 | 土木工程也开始AI化了:用卷积神经网络实现结构损伤视觉识别
- 彻底理解HashMap及LinkedHashMap
- JDK 17 要来了!会带来什么新特性?不好意思,我还在 JDK 7 踏步走...
- 不少Java程序员都觉得Lambda表达式很鸡肋,它到底有何用呢?
- 【精简教程版】100行代码入手天池CV赛事
- Kaggle知识点:数据分析思路与工具(EDA)
- 【numpy学习笔记】数组的切片,索引,迭代