您正在查看
clear每个元素,但对它们的引用仍保留在根文档中。因此,仍然无法对各个元素进行垃圾回收。请参阅ElementTree文档中的讨论。
解决方案是清除根目录中的引用,如下所示:
# get an iterablecontext = iterparse(source, events=("start", "end"))# turn it into an iteratorcontext = iter(context)# get the root elementevent, root = context.next()for event, elem in context: if event == "end" and elem.tag == "record": ... process record elements ... root.clear()关于内存使用情况要记住的另一件事(可能不会影响您的情况)是,一旦VM从系统分配内存用于堆存储,它通常就不会再退还该内存。大多数Java
VM也以这种方式工作。所以,你不应该指望在解释的大小
top或
ps永远下降,即使堆内存的使用。



