我正在使用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);
答案 0 :(得分:1)
您可以尝试rapidjson。
它针对内存使用和性能进行了优化。
通过使用insitu-parsing选项(即它更改解析的源字符串),每个JSON值只产生16个字节,以便在32位架构中存储DOM。字符串值将使用指向修改后的源字符串的指针。
我希望内存使用量会少得多。
另一方面,rapidjson也支持SAX风格的解析。如果应用程序只需要从头到尾遍历JSON文件(例如,做一些统计),那么SAX风格的API将更快且内存消耗很少(程序堆栈+字符串值的最大长度)。
答案 1 :(得分:0)
我认为,这不依赖于JSON。这更像是数据结构开销的问题。如果您有许多小对象,则管理部分变得越来越相关。
虽然开销超过7倍,但看起来真的太过分了。