C ++中序列化对象的性能

时间:2010-04-24 08:17:35

标签: c++ performance serialization

我想知道是否有一种快速方法可以将STL set转储到磁盘,然后再将其读回。

set的内部结构是二叉树,所以如果我天真地序列化它,当我读回它时,程序将不得不再次插入每个元素的过程。我认为即使以正确的顺序回读它也很慢,如果我错了,请纠正我。

有没有办法将包含该内存的内存“转储”到磁盘中,然后再将其读回?也就是说,将所有内容保持为二进制格式,从而避免重新插入。

boost序列化工具是否可以执行此操作?

谢谢!

编辑:哦,我应该读一读,http://www.parashift.com/c++-faq-lite/serialization.html我现在会读它......不,它没有真正的帮助

2 个答案:

答案 0 :(得分:2)

不,如果您实际上是从硬盘(或可能是任何永久存储器)读取它,机械部件将成为瓶颈。

如果将容器放在一个连续的内存块中,那个块必须有一些可用空间,从磁盘读取浪费的空间会浪费时间......和磁盘空间。

这是经典的过早优化。

如果你真的发现自己需要它,Boost Interprocess有(相对)序列化友好的容器。

答案 1 :(得分:2)

由于每个set元素都在堆上的某个位置,因此您不能只将结构转储到磁盘上。因此,您需要一个适当的序列化例程来遍历每个元素。

要再次读回元素,可以使用“提示”,它允许您提示插入元素的插入方法。这可以使集合的构造恢复到线性复杂度,而不是n log n。