读取200 mb json文件需要1.5 gb内存 我使用C++中的JSONSyValk库解析200 MB JSON文件。令我惊讶的是,当我在程序中读入内存时,我的RAM中有1.5 gb被使用。这是反序列化json时所期望的吗
下面是我如何加载json文件:读取200 mb json文件需要1.5 gb内存 我使用C++中的JSONSyValk库解析200 MB JSON文件。令我惊讶的是,当我在程序中读入内存时,我的RAM中有1.5 gb被使用。这是反序列化json时所期望的吗,c++,json,C++,Json,下面是我如何加载json文件: std::ifstream istream(path.c_str()); json_spirit::mValue val; json_spirit::read(istream, val); 我认为,这并不依赖于JSON。这更多的是数据结构开销的问题。如果您有许多小对象,那么管理部分将变得越来越重要 虽然,超过七倍的开销似乎真的太多了。您可以试试 它针对内存使用和性能进行了优化 通过使用原位解析选项(即,它更改解析的源字符串),每个JSON值只需要16个字节
std::ifstream istream(path.c_str());
json_spirit::mValue val;
json_spirit::read(istream, val);
我认为,这并不依赖于JSON。这更多的是数据结构开销的问题。如果您有许多小对象,那么管理部分将变得越来越重要 虽然,超过七倍的开销似乎真的太多了。您可以试试 它针对内存使用和性能进行了优化 通过使用原位解析选项(即,它更改解析的源字符串),每个JSON值只需要16个字节就可以在32位体系结构中存储DOM。字符串值将使用指向修改后的源字符串的指针 我希望内存使用会少很多
另一方面,rapidjson还支持SAX风格的解析。如果应用程序只需要从头到尾遍历JSON文件(例如,进行一些统计),那么SAX风格的API将更快,并且内存消耗更少(程序堆栈+字符串值的最大长度)。我建议您向
JSON\u spirit
维护人员提出这个问题,他们可能知道(并提供建议/解决方法)或者他们可能欢迎反馈并调查根本原因。无论如何,你肯定不会有任何损失。