我们的程序目前使用 libxml2 DOM API ( xmlReadFile
) 将整个文件加载到内存中。不幸的是,这在“大型”XML 文件上会失效,因为libxml2 DOM 的基本内存消耗大约是基本文件大小的 4-5 倍。
当我不想将整个树存储在内存中时,似乎 libxml2 提供了两个用于读取 XML 的 API:SAX2和xmlReader。
我还没有深入研究 API,但我想知道在哪种情况下哪个更可取?
注意:我需要对 XML 文件做的就是用 XML 文件中的数据填充一些 C++ 数据结构。而这些又会比(非常冗长的)XML 定义小很多。目前,使用xmlReadFile
DOM API 处理 20MB 的 XML 文件需要大约 100MB 的内存。这样一个文件在内存中的 C++ 数据更像是 5MB——所以我可以从 1:4 变为 4:1,这已经很有帮助了。