读取200 MB的json文件需要1.5 GB的内存

时间:2012-10-27 23:10:13

标签: c++ json

我正在使用C ++中的json_spirit库来解析一个200 MB的json文件。让我感到惊讶的是,当我在程序中读入内存时,会使用1.5 GB的RAM。这是反序列化json时预期的事情吗?

以下是我在json文件中加载的方式:

 std::ifstream istream(path.c_str());
 json_spirit::mValue val;
 json_spirit::read(istream, val);

2 个答案:

答案 0 :(得分:1)

您可以尝试rapidjson

它针对内存使用和性能进行了优化。

通过使用insitu-parsing选项(即它更改解析的源字符串),每个JSON值只产生16个字节,以便在32位架构中存储DOM。字符串值将使用指向修改后的源字符串的指针。

我希望内存使用量会少得多。

另一方面,rapidjson也支持SAX风格的解析。如果应用程序只需要从头到尾遍历JSON文件(例如,做一些统计),那么SAX风格的API将更快且内存消耗很少(程序堆栈+字符串值的最大长度)。

答案 1 :(得分:0)

我认为,这不依赖于JSON。这更像是数据结构开销的问题。如果您有许多小对象,则管理部分变得越来越相关。

虽然开销超过7倍,但看起来真的太过分了。