代码改变世界

测试Protobuffer的定义格式对其时间和空间的影响

2017-03-03 18:15  jiayayao  阅读(572)  评论(0编辑  收藏  举报

  测试Protobuffer格式的A命令转换为std::string的的字节个数,分别测试了工程中用到的几种命令:

  a)AddLayer:108

  b)AddSource:209

  c)MoveLayer:44

  d)DeleteLayer:48

  e)ClearScreen:36

  但是实际应用时是以B命令接收,然后转换为C命令,这个C命令再拆分为A命令,整体下来接收到的字节较多,数据如下:

  a)AddLayer+AddSource:410

  b)MoveLayer:150

  c)DeleteLayer:153

  d)ClearScreen:123

  由以上两者的对比得出结论:命令的两次嵌套普遍带来了将近100个字节的开销。显然,嵌套的层数越少,转换出字符串的字节数越小。另外如果一个Protobuffer的message定义中包含了很多空字段,这些空字段其实不会消耗太多字节(序列化后发现其大小为0)。

  搜索资料可知,Protobuffer在包含repeated元素时,时间开销会较多,因为涉及到repeated元素个数到达一定值时的内存重新分配。所以,从时间和空间的角度来说,对Protobuffer的定义有两个建议,一是尽量少的嵌套,以减少空间开销(个人的理解,Protobuffer的定义应该扁平化);二是repeated元素不应过多,以减少时间开销。

 


参考资料:
http://blog.csdn.net/yang3wei/article/details/46360099