使用yaml-cpp解析YAML时的内存消耗

时间:2014-05-18 17:43:19

标签: c++ json yaml-cpp

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

我在考虑使用流:

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

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

  1. yaml-cpp需要多少内存才能解析1MB数据?
  2. 我想已经解析了解压缩器的原始数据和YAML解析器用于该数据的内部存储器,一旦创建了映射到数据库的对象,就会释放它。有可能吗?
  3. yaml-cpp是否支持异步解析?因此,只要解析了JSON对象,我就可以将其存储在数据库中,而无需等待来自HTTP源的完整内容。

1 个答案:

答案 0 :(得分:0)

由于您有内存限制且数据已经是JSON,因此您应该使用低内存JSON解析器而不是YAML解析器。试试jsoncpp - 虽然我不确定他们对流媒体的支持是什么(因为JSON没有文档的概念)。

yaml-cpp 设计用于流式传输,因此如果要解析文件但流仍处于打开状态,它将不会阻止;但是,yaml-cpp中有一个outstanding issue,它一次读取多个文档,所以它实际上不是为极低的内存使用而设计的。

至于解析1 MB数据需要多少内存,它可能大约为3 MB(原始输入流,加上解析后的流,加上结果数据结构),但它可能会有很大差异,具体取决于你正在解析什么样的数据。