0

我正在使用带有增强序列化的多重继承。而不是做

boost::serialization::base_object< Connection<T> >(*this)
boost::serialization::base_object< Collection<C> >(*this)

我在做

template<typename ArchiveT>
void save(ArchiveT& arc, const unsigned version) const{
  //both Connection<T> and Collection<C> are Base Classes
  Connection<T>::save(arc, version);
  Collection<C>::save(arc, version);
}

及其工作。那么他们两个是一样的吗?或者这样做有什么害处?我应该更改此代码吗?

{这东西是很久以前编码的。所以我忘记了为什么我用这种方式编码。可能我当时不知道base_object}

我正在序列化大量数据(~1.6 GB)。当我序列化时,我看到序列化过程占用了大量内存并达到 3GB 的障碍。我试过评论序列化代码,它需要 < 50MB 内存。那么是什么让序列化占用了这么大的内存呢?

4

1 回答 1

0

您应该更改代码并通过base_object<>().

文档中:

[...] 请注意,这与调用基类的序列化函数不同。这似乎可行,但会绕过用于跟踪对象的某些代码,以及注册基派生关系和序列化系统按设计运行所需的其他簿记。因此,所有序列化成员函数都应该是私有的。

额外的内存消耗可能是由对象跟踪引起的。如果您要跟踪大量对象,则在序列化期间内存消耗会急剧增加。

特殊考虑

如果事先知道没有重复的指针值,则可以通过适当地设置对象跟踪类序列化特征来消除与对象跟踪相关的开销。

如果您不需要对象跟踪,您可以通过以下方式禁用它:

BOOST_CLASS_TRACKING(the_class, boost::serialization::track_never)
于 2012-11-22T11:36:19.203 回答