7

我发现 boost::property_tree::ptree 具有巨大的内存开销。我的估计是一个空的 ptree 大约有 150 个字节,并且,放入 ptree 中的任何条目至少会增加另外 150 个字节。这使得我们无法使用包含数千个条目的树。

我的估计有问题吗?有什么方法可以保持低开销吗?

4

1 回答 1

2

Boost.PropertyTree 基本上不是一个快速轻量级的解析器。
它专注于提供高层便利和功能,所以我猜它并不是为了高效而构建的。

你可以在 boost mailing list 上看到这个线程来解决类似的问题。

我建议 Boost.PropertyTree 的替代方案可能是:

  • SAX 解析器——这是 XML 解析的另一种方法。这就像 DOM 解析器的对立面;它一一解析 XML 节点。通常,“开始时为整个文件分配内存”发生在 DOM 解析器中,但不会发生在 SAX 解析器中。
  • 分配器可自定义的解析器+ 用户定义的内存池——您可以配置此类解析器的分配器以指向稳定的内存池。它可能只是一个预分配内存的大缓冲区,一个碎片感知池,甚至是一个内存映射文件等......
于 2013-06-08T16:14:06.580 回答