我一直在高度时间敏感的软件中使用cereal,每微秒都很重要。我的程序在一个循环中运行,并在每次迭代时序列化struct
。 struct
包含一些STL容器和字符串,因此大小可以在迭代之间变化。
我注意到谷物在第一次序列化时需要更长的时间才能完成,并且后续序列化尝试的时间要少得多。它第一次花了大约600微秒,然后平均80微秒。
在追踪图书馆后,我无法确定第一次尝试与其他所有人的不同之处。我猜测它与解析我的struct
或为stringstream
分配内存有关。
我发现this post很有意思,特别是建议将谷类扩展到不使用溪流。我尝试创建BinaryOutputArchive
类的一个版本,该版本使用void*
缓冲区而不是std::ostream
,但是没有成功编译。我也尝试使用rdbuf
as suggested here的stringstream
,但我无法正确序列化。
是否有人建议如何提高谷物的性能,特别是在第一次序列化时?或者也许是一种实现确定性延迟的方法?我上面的尝试是否在正确的轨道上?