febird.DataIO 和 boost.serialization 编译性能对比

C++ 程序的性能,重要的不光是运行性能,还有编译性能。运行性能就不多说了,编译性能往往被大家忽略,但是,想一下,如果编译一次要花一小时,那每天能编译几次?

和 boost.serialization 相比,febird.DataIO 的运行性能和编译性能都压倒性地胜出:

运行性能(针对 POD 数据,基本用法)

febird 序列化声明

也可以为 boost 定义一个宏,语法就跟febird的序列化声明相同

因为febird进行了自动优化,而boost需要用户执行优化。并且febird可以在不改变的代码的情况下,就可以写成Portable数据格式,即使使用Portable,转化了字节序,仍然比boost快得多(10倍以上)。但是对基本数据类型的vector,两者的性能差不多,因为boost对简单数据类型做了优化。

读写文件

前提是在缓存的情况下,对POD数据的操作,平均快20倍:

文件 boost配置 febird配置
Writer boost::archive::binary_oarchive NativeDataOutput<OutputBuffer<FileStream> >
Reader boost::archive::binary_iarchive NativeDataInput<InputBuffer<FileStream> >

 读写内存

平均快50倍,极速模式甚至比 boost 快了 1500 倍

内存 boost配置 febird配置 febird极速模式
Writer boost::archive::binary_oarchive NativeDataOutput<AutoGrowMemIO> NativeDataOutput<MinMemIO>
Reader boost::archive::binary_iarchive NativeDataInput<MemIO> NativeDataInput<MinMemIO>

编译性能

  • 使用自动生成的代码,迭代所有的基本类型,shuffle后生成20个POD类型。
  • 对stl标准容器和基本类型代码迭代,生成20个complex类型。
  • 然后读写这些类型。
编译+连接时间 目标文件尺寸(KB)
*.exe *.pdb
boost-debug 61秒 5,739 30,627
febird-debug 23秒 2,129 14,771
boost-release 155秒 1,794 14,775
febird-release 54秒 384 4,451
作者:
该日志由 rockeet 于2009年04月06日发表在C++序列化分类下, 你可以发表评论,并在保留原文地址及作者的情况下引用到你的网站或博客。
转载请注明: febird.DataIO 和 boost.serialization 编译性能对比
标签:
【上一篇】
【下一篇】

您可能感兴趣的文章:

2 个回复

  1. tangb4c说道:

    下了代码初看了一次,很优秀的代码。
    最近公司在做这方面的东西,主要想封装打包解包,或许可以从你的代码中借鉴一些东西
    以后有不懂的地方希望可以向你请教

  2. whinah说道:

    回复 tangb4c:欢迎交流

发表评论

您必须 登录 后才能发表评论。