我通过枚举目录解析大量(> 1000)XML文件,然后将解析后的数据插入Yap数据库。我尝试了SWXMLHash
和AEXML
。它们都表现出类似的内存使用情况,如下所示:
枚举/插入完成时会出现这种情况。如果我将XML作为普通字符串读取,它可以正常工作,内存消耗低于160 MB。使用仪器我确定没有内存泄漏,并且不可能,因为内存最终被回收。那么这里发生了什么?
===== 更新:
消除了所有其他可能性,我发现由于XML解析或Yap数据库而无法解决问题。这是因为XML解析函数中的数组创建。
答案 0 :(得分:1)
这是autoreleasepool引起的典型问题。在以下情况下手动使用autoreleasepool:
如果您正在编写一个不基于UI框架的程序,例如命令行工具。
如果编写一个创建许多临时对象的循环。 您可以在循环内使用自动释放池块在下一次迭代之前处理这些对象。在循环中使用自动释放池块有助于减少应用程序的最大内存占用量。
如果你产生了一个辅助线程。
同时检查:Is it necessary to use autoreleasepool in a Swift program?