C++ 使用YAML cpp解析YAML期间的内存消耗

C++ 使用YAML cpp解析YAML期间的内存消耗,c++,json,yaml-cpp,C++,Json,Yaml Cpp,我正在为内存有限的嵌入式系统开发Qt应用程序。我需要接收几兆字节的JSON数据,并尽可能快地解析它,同时不使用太多内存 我在考虑使用流: JSON源代码(HTTP客户端)--->ZIP解压缩程序---->YAML解析器---->映射到数据库的对象 数据从网络到达的速度将比我解析数据的速度慢得多 yaml cpp解析1MB数据需要多少内存 我希望已经解析了来自解压器的原始数据,YAML解析器用于该数据的内部内存在创建映射到数据库的对象后立即释放。可能吗 yaml cpp是否支持异步解析?所以,一旦

我正在为内存有限的嵌入式系统开发Qt应用程序。我需要接收几兆字节的JSON数据,并尽可能快地解析它,同时不使用太多内存

我在考虑使用流:

JSON源代码(HTTP客户端)--->ZIP解压缩程序---->YAML解析器---->映射到数据库的对象

数据从网络到达的速度将比我解析数据的速度慢得多

  • yaml cpp解析1MB数据需要多少内存
  • 我希望已经解析了来自解压器的原始数据,YAML解析器用于该数据的内部内存在创建映射到数据库的对象后立即释放。可能吗
  • yaml cpp是否支持异步解析?所以,一旦解析了JSON对象,我就可以将其存储在数据库中,而无需等待来自HTTP源的完整内容

  • 因为您有内存限制,并且数据已经在JSON中,所以应该使用低内存JSON解析器而不是YAML解析器。试试看——尽管我不确定他们对流媒体的支持是什么(因为JSON没有文档的概念)

    yaml cpp是为流式处理而设计的,因此如果有文档要解析,但流仍然打开,它就不会阻塞;然而,在yaml cpp中,它一次读取多个文档,因此它并不是为极低的内存使用而设计的


    至于解析1MB数据所需的内存,可能大约为3MB(原始输入流加上解析后的流,再加上生成的数据结构),但根据解析的数据类型,可能会有很大的不同。

    您正在接收多少对象?每个对象中有多少属性?每个物业的平均面积?我知道yaml cpp能够在对象进入时一次解析一个对象吗?你是在接收JSON还是YAML?我可以接收几千个对象。它可以很容易地显示7MB的文本。我使用JSON,它是YAML 1.2的子集,可以用YAML cpp进行解析。我不知道yaml cpp是否能够一次解析一个对象,因为这是我问题的一部分:)你能推荐一些适合这个目的的C/C++库吗?我在Ubuntu repo中快速搜索了一下,没有找到任何合适的。你能回答我的3个问题吗?从你们所说的,我猜2和3的答案是“不”。第一个问题呢?我回到了这一功能的优化。在解析之前和之后,我检查了进程的VmPeak,结果发现VmPeak增加了16MB。这个结果是通过压缩的JSON文件实现的,压缩后的JSON文件大小为84kB,解压后几乎为1MB。与此相比,RapidJSON原位解析为我增加了3MB。