开发学院,分享开发教程和最新动态
章节列表 什么是ProtobufProtobuf3 定义数据类型Protobuf3 标量值类型Protobuf3 缺省值Protobuf3 枚举Protobuf3 使用其他消息类型Protobuf3 嵌套类型Protobuf3 更新消息类型Protobuf3 未知字段Protobuf3 Any类型Protobuf3 OneofProtobuf3 MapsProtobuf3 包Protobuf3 定义服务Protobuf3 JSON映射Protobuf3 可选项Protobuf3 生成属于自己的类Protobuf 风格指南Protobuf 编码(1)Protobuf 编码(2)Protobuf 编码(3)Protobuf 技术Protocol Buffer C++实例教程: 为什么使用Protocol Buffer?Protocol Buffer C++实例教程: 定义协议格式Protocol Buffer C++实例教程: 编译Protocol BufferProtocol Buffer C++实例教程: Protocol Buffer APIProtocol Buffer C++实例教程: 发送消息Protocol Buffer C++实例教程: 读取消息Protocol Buffer C++实例教程: 扩展Protocol BufferProtocol Buffer C++实例教程: 优化技巧和高级用法Protocol Buffer C#实例教程: 前言Protocol Buffer C#实例教程:定义协议格式Protocol Buffer C#实例教程:编译Protocol Buffer Protocol Buffer C#实例教程:解析和序列化Protocol Buffer Go实例教程:前言Protocol Buffer Go实例教程:定义协议格式Protocol Buffer Go实例教程:编译Protocol BufferProtocol Buffer Go实例教程:读写消息Protocol Buffer JAVA实例教程:前言Protocol Buffer JAVA实例教程:定义协议格式Protocol Buffer JAVA实例教程:编译Protocol BufferProtocol Buffer JAVA实例教程:Protocol Buffer APIProtocol Buffer JAVA实例教程:写消息Protocol Buffer JAVA实例教程:读消息Protocol Buffer JAVA实例教程:扩展Protocol BufferProtocol Buffer Python实例教程:前言Protocol Buffer Python实例教程:定义消息格式Protocol Buffer Python实例教程:编译Protocol BufferProtocol Buffer Python实例教程:Protocol Buffer APIProtocol Buffer Python实例教程:写消息Protocol Buffer Python实例教程:读取MessageProtocol Buffer Python实例教程:扩展Protocol Buffer

Protocol Buffer C++实例教程: 优化技巧和高级用法

优化技巧

  C++Protocol Buffer库被极度优化。然而,正确的使用可以进一步提高性能。以下是一些榨干Protocol Buffer性能的技巧:

  尽可能重用消息对象。消息试图保留它们分配给重用的任何内存,即使它们被清除了。因此,如果您正在连续处理许多具有相同类型和相似结构的消息,那么每次从内存分配器中卸载时重用相同的消息对象是一个好主意。然而,随着时间的推移,对象可能会变得臃肿,尤其是如果你的信息在“shape”中有所不同,或者你偶尔会构建一个比平时大得多的信息。您应该通过调用SpaceUsed方法来监控消息对象的大小,并在它们变得太大时将其删除。。

  您系统的内存分配器可能没有很好地优化,无法从多个线程中分配大量小对象。试试使用谷歌的tcmalloc。

高级用法

  Protocol buffer的用途超出了简单访问器和序列化。请务必浏览C++应用编程接口参考,看看您还可以用它们做些什么。

  协议消息类提供的一个关键特性是反射。您可以迭代消息的字段并操作它们的值,而无需针对任何特定的消息类型编写代码。使用反射的一个非常有用的方法是将协议消息转换成其他编码,如XML或JSON。反射的一个更高级的用途可能是发现相同类型的两个消息之间的差异,或者开发一种“协议消息的正则表达式”,在这种表达式中,您可以编写与某些消息内容匹配的表达式。如果你发挥想象力,就有可能将Protocol buffer应用到比你最初预期的更广泛的问题上!

  反射由Message::Reflection接口提供。