Archive

Archive for July, 2010

SlimXml和TinyXml,RapidXml的性能对比

July 18th, 2010 7 comments

前两天有朋友问,我的SlimXml有没有和RapidXml对比过效率?我是第一次听说这个库,更不用说对比效率了,于是上他们网站看了下。

好家伙,居然号称比TinyXml快30~60倍,而且是Boost.PropertyTree的默认xml解析器。

于是有点好奇,因为以前也没有特别关心过SlimXml的效率。

于是分别下载了TinyXml-2.6.1和RapidXml-1.13,迅速用vc8建立了两个测试工程,在系统中搜”*.xml”,找到了一个比较合适的测试文件。它足够大(1.5M),utf-8编码并且包含中/英文,有一定层次深度,大约3.3万行。测试文件可以从这里下载

测试对象是三个库从内存字符串解析xml的函数,这样能排除从硬盘上读文件这种不稳定因素的干扰,而且RapidXml貌似只支持从内存里解析

  • slim::XmlDocument::loadFromMemory()
  • TiXmlDocument::Parse()
  • rapidxml::xml_document<char>::parse<flag>()

要说明的是,RapidXml的这个parse是一个模板函数,必须给一个flag的参数,我测试的时候给的是默认的0

测试结果,解析这个3.3万行,1.5M大小的xml,三个库分别花了

  • SlimXml:    13ms
  • TinyXml:    54ms
  • RapidXml: 4ms!

Read more…

Categories: 程序/算法 Tags:

Grandpa Demo on iPhone

July 6th, 2010 2 comments

Grandpa从设计之初就定位于跨平台,渲染API无关的库。核心代码仅依赖c++标准库,理论上可以在任何平台,用任何(基本)符合c++标准的编译器编译。

但是这次还是碰到了一些问题,主要还是VC用的时间太长了,没有意识到某些特性实际上是非标准的,例如:

  • hash_map头文件的位置不同。大家都知道该容器是非标准的,在vc下该头文件和其他容器在一起,而gcc下在ext子目录中
  • gcc警告最后一行非空(也就是说源代码文件最后一个字符必须是回车,标准的确是这么规定的),vc不会警告
  • vc允许只声明enum,gcc不允许
  • gcc没有“安全版”(带_s)的字符串处理函数

另外,Mac OS X(以及Linux等其他Unix系的操作系统)是用utf-8表示unicode,而Windows则采用utf-16,这一点也引起了一些小麻烦。

还有一个很讨厌,gcc居然不认识utf-8的bom(ef,bb,bf)。导致我所有的源代码文件都要改为multibytes编码

好在这些都是小问题,花了不到一天时间就都解决了。

特别感谢张志鹏同学,帮我把原来基于d3d的Demo移植到了Opengl es上。

另外从今天开始,Grandpa SDK开放svn更新,地址为 Http://www.multi-crash.com/release

推荐使用TortoiseSVN

Categories: 程序/算法 Tags: , ,