代码之家  ›  专栏  ›  技术社区  ›  jab

如何在Boost序列化中使用数组优化

  •  2
  • jab  · 技术社区  · 15 年前

    我必须对一个包含std::vector的对象进行序列化,该对象可以包含数千个成员,如果这个向量大小的话,序列化就不能很好地进行扩展。

    根据文档,Boost提供了 wrapper 类数组,它包装向量以进行优化,但生成相同的XML输出。在Boost代码中,我发现了一个名为use_array_optimization的类,它似乎可以控制优化,但在默认情况下不起作用。我还尝试重写没有结果的序列化函数。

    我想知道如何激活这些优化,因为Boost的文档不清楚。

    提前谢谢你

    2 回复  |  直到 15 年前
        1
  •  0
  •   Éric Malenfant    15 年前

    数组优化背后的想法是,对于可以通过简单地将它们的表示“转储”到存档中来存档的类型数组,一次“转储”整个数组比一个元素一个元素地“转储”整个数组要快。

    我从您的问题中了解到您正在使用XML存档。在这种情况下,数组优化不适用,因为元素的序列化无论如何都意味着转换。

        2
  •  0
  •   jab    15 年前

    最后,我使用了boost_serialization_split_member()宏并编写了两个用于加载和保存的函数。保存功能如下:

    template<class Archive>
    void save(Archive & ar, const unsigned int version) const
    {
        using boost::serialization::make_nvp;
    std::string     sdata;
    Vector2String(vData, sdata);
    ar & boost::serialization::make_nvp("vData", sdata);
    }
    

    vector2string函数简单地以向量形式获取数据,并将其格式化为std::string。LOAD函数使用一个反转编码的函数。