我发现boost::property_tree::ptree有巨大的内存开销。我的估计是,一个空的ptree大约有150个字节,而放入ptree中的任何条目至少会增加150个字节。这使得它无法用于包含数千个条目的树。
我的估计错了吗?有什么办法可以降低管理费用吗?
PropertyTree基本上不是一个快速或轻量级解析器。它专注于提供高层的便利和功能,所以我想它不是为了高效而构建的。
你可以在boost邮件列表中看到类似的问题。
我建议使用Boost的替代方案。PropertyTree可以是:
- 一个SAX解析器——这是XML解析的另一种方法。它就像DOM解析器的对立面;它逐个解析XML节点。通常,"开始时为整个文件分配内存"发生在DOM解析器中,但不会发生在SAX解析器中。
- 和分配器—可定制的解析器 +用户定义的内存池—您可以配置这种解析器的分配器来指向稳定的内存池。它可以是一个预分配内存的大缓冲区,一个片段感知池,甚至是一个内存映射文件,等等。