如何解析一个巨大的 XML 文件而不是 运行 内存不足
How to parse a huge XML file any not run out of memory
我的应用程序可以导入 GPX 文件 (XML),然后我使用很棒的 XML Dictionary 库,它在解析 XML 和 GPX 方面做得非常出色,但在这种情况下我我想尝试解析一个 85MB 的文件。它包含超过 16,000 个 GPX waypoints,这是巨大的。
目前我将 NSURL
读入 NSData
,然后使用解析器。但是我在尝试处理大文件时收到内存警告和崩溃。
如何分块解析这样的大文件,以免出现内存错误?
您正在使用的 XML 字典库的问题在于它构建了整个 XML 文件的庞大对象树。这会占用大量内存。
最好使用 SAX 解析器,例如标准 NSXMLParser
class。除了在解析过程中保留的任何数据结构外,什么都不会保留在内存中。
在任何一种情况下,您都不需要在解析之前将整个 XML 文件加载到内存中。打开文件流并将流传递给解析器。
我的应用程序可以导入 GPX 文件 (XML),然后我使用很棒的 XML Dictionary 库,它在解析 XML 和 GPX 方面做得非常出色,但在这种情况下我我想尝试解析一个 85MB 的文件。它包含超过 16,000 个 GPX waypoints,这是巨大的。
目前我将 NSURL
读入 NSData
,然后使用解析器。但是我在尝试处理大文件时收到内存警告和崩溃。
如何分块解析这样的大文件,以免出现内存错误?
您正在使用的 XML 字典库的问题在于它构建了整个 XML 文件的庞大对象树。这会占用大量内存。
最好使用 SAX 解析器,例如标准 NSXMLParser
class。除了在解析过程中保留的任何数据结构外,什么都不会保留在内存中。
在任何一种情况下,您都不需要在解析之前将整个 XML 文件加载到内存中。打开文件流并将流传递给解析器。