我们的程序当前使用libxml2 DOM API(xmlReadFile
)将整个文件加载到内存中。不幸的是,这会破坏大型文件,如the basic memory consumption of libxml2 DOM is about 4-5 times the base file size。
当我不想将整个树存储在内存中时,libxml2似乎提供了两个用于读取XML的API:SAX2和xmlReader。
我还没有研究过API,但是我想知道哪种API在哪种情况下更可取?
注意:我要做的只是用XML文件中的数据填充某些C ++数据结构。这些反过来比(非常冗长的)XML定义要小得多。目前,使用xmlReadFile
和DOM API,该过程将为20MB XML文件占用大约100MB内存。此类文件在内存中的C ++数据更像是5MB,因此我可以从1:4转到4:1,这已经很有帮助了。
最佳答案
我采用这种方法,如果处理稀疏(这里和那里仅需要一个元素),则xmlReader更好,如果需要处理所有元素,则SAX更好。虽然,关于是否要推送处理还是要让处理推送代码的意见可能会出现。
关于c++ - 大文件应该使用哪个libxml2 API?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15551141/