2 回答

TA贡献1784条经验 获得超7个赞
您给的时间是用于序列化、反序列化还是两者兼而有之?
您的反序列化代码可能完全由fmt.Println
. 您为什么不在计时完成后进行sum += objVertices.X() + objVertices.Y()
打印?sum
你能拉出objVertices := &MyFlat.Vertices{}
循环吗?
您没有发布您的 protobuf 代码。您是否在计时中包括创建正在序列化的对象树的时间(在 Protobuf 中使用但在 FlatBuffers 中不需要)?同样,您是否进行了至少 1000 倍左右的定时(反)序列化,因此您可以在比较中包括 GC 成本(Protobuf 分配大量对象,FlatBuffers 分配很少/无)?
如果执行上述操作后仍然较慢,请在 FlatBuffers github 问题上发帖,Go 端口的作者可能会提供进一步的帮助。确保发布两个系统的完整代码和完整的时间。
一般注意:FlatBuffers 的设计是这样的,它将与 C/C++ 中的 Protobuf 产生最大的性能差距。也就是说,它在 Go 中也应该快得多。然而,Go 有一些不幸的事情阻止它最大限度地发挥性能潜力。

TA贡献1828条经验 获得超6个赞
b := flatbuffers.NewBuilder(0)
我不确定 Go for flatbuffers 中的“自动增长”行为是什么,但我很确定要求缓冲区自动增长不是首选模式。您可以在初始化缓冲区后尝试进行相同的时序比较flatbuffers.NewBuilder(moreBytesThanTheMessageNeeds)
吗?
- 2 回答
- 0 关注
- 111 浏览
添加回答
举报