测试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

测试Protobuffer的定义格式对其时间和空间的影响的更多相关文章

  1. build.sbt的定义格式

    一个简单的build.sbt文件内容如下: name := "hello" // 项目名称 organization := "xxx.xxx.xxx" // 组 ...

  2. C#中 String 格式的日期时间 转为 DateTime

    C#中并没有表示时间的变量,只有DateTime,所以要表示时间,可以用TimeSpan表示. 方法一:Convert.ToDateTime(string) string格式有要求,必须是yyyy-M ...

  3. javascript两行代码按指定格式输出日期时间

    javascript两行代码按指定格式输出日期时间,具体看代码: function date2str(x,y) { var z ={y:x.getFullYear(),M:x.getMonth()+1 ...

  4. python第三十课--异常(异常处理定义格式和常见类型)

    演示: 1).异常处理的定义格式: 2).常见的运行时异常类型: try: print(10/0) num=int('132a') except Exception as e: print('出错了. ...

  5. Python 将一个时间戳格式化为(格林威治时间或者本地时区时间)

    时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数. 获取一个时间戳 import time times = time. ...

  6. UTCformat 转换UTC时间并格式化成本地时间

    /** * UTCformat 转换UTC时间并格式化成本地时间 * @param {string} utc */ UTCformat (utc) { var date = new Date(utc) ...

  7. 条款26:尽可能延后变量定义式的出现时间(Postpone variable definitions as long as possible)

    NOTE : 1.尽可能延后变量定义式的出现时间.这样做可增加程序的清晰度并改善程序效率.

  8. Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组

    Python time strptime() 函数根据指定的格式把一个时间字符串解析为时间元组 import time dt=time.strptime('2019-08-08 11:32:23', ...

  9. Go语言学习之斐波那契数列的测试例子和定义常量方法

    ### Go语言学习之斐波那契数列的测试例子和定义常量方法 1.go语言中测试文件必须以test.go结尾,比如:fib_test.go 2.测试文件内的方法必须是Test开头,比如:func Tes ...

随机推荐

  1. C#学习笔记(基础知识回顾)之值传递和引用传递

    一:要了解值传递和引用传递,先要知道这两种类型含义,可以参考上一篇 C#学习笔记(基础知识回顾)之值类型和引用类型 二:给方法传递参数分为值传递和引用传递. 2.1在变量通过引用传递给方法时,被调用的 ...

  2. Bootstrap框架和inconfont、font-awesome使用

    iconfont的使用:https://www.cnblogs.com/clschao/articles/10387580.html Bootstrap介绍 Bootstrap是Twitter开源的基 ...

  3. 使用input做简单的上传图片

    css 代码: .container{ width: 200px; height: 200px; border: 1px solid #666; } HTML 代码: <input type=& ...

  4. EasyNetQ简单使用

    class Program { static void Main(string[] args) { //打开消息确认机制 using (var bus = RabbitHutch.CreateBus( ...

  5. 空间分析开源库GEOS

    History of GEOS GEOS中Geometry的结构 GEOS分析功能简介 1.History of GEOS J​T​S​ ​T​o​p​o​l​o​g​y​ ​S​u​i​t​e是Ma ...

  6. react常用命令

    npm install -g create-react-appcreate-react-app my-appcd my-app/ 启动项目:npm start 安装依赖:npm install 编译: ...

  7. 新建虚拟机,每次都提示无法连接虚拟设备 ide1:0

    处理方式:看到了这个老哥http://www.cnblogs.com/dean-du/p/6888513.html的博客,发现问题是一样的,所以记录一下. 将虚拟机设置中的CD/DVD选项中的连接更改 ...

  8. matplotlib.pyplot 导引

    matplotlib.pyplot 是采用 python 语言和使用数值数学库 numpy 数组数据的绘图库.其主要目标是用于数据的可视化显示. 输出图形组成 matplotlib.pyplot 模块 ...

  9. 使用mathjax在博客中完美显示数学公式,支持PC,手机浏览器

    在博客园的设置选项里 有页头HTML的框内输入: <script type="text/javascript" src="http://cdn.mathjax.or ...

  10. java笔记--正则表达式的运用(包括电话,邮箱验证等)

    正则表达式 --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3877402.html "谢谢-- 正则表达式符号:" ...