gpt4 book ai didi

python - 在清除树时使用 ElementTree.iterparse() 时内存使用量是否应该增加?

转载 作者:太空狗 更新时间:2023-10-29 21:37:59 25 4
gpt4 key购买 nike

import os
import xml.etree.ElementTree as et

for ev, el in et.iterparse(os.sys.stdin):
el.clear()

在 ODP 结构上运行以上 RDF dump结果总是增加内存。这是为什么?我知道 ElementTree 仍然构建了一个解析树,尽管有子节点 clear()ed。如果这是这种内存使用模式的原因,是否有解决方法?

最佳答案

您正在清除每个元素,但对它们的引用仍保留在根文档中。所以单个元素仍然不能被垃圾回收。

解决方案是清除根目录中的引用,如下所示:

import xml.etree.ElementTree as ET

# get iterator
context = ET.iterparse(source, events=("start", "end"))

# get the root element
event, root = next(context)

for event, elem in context:
if event == "end" and elem.tag == "record":
# process record elements here...
root.clear()

关于内存使用的另一件事要记住,这可能不会影响您的情况,即一旦 VM 从系统为堆存储分配内存,它通常永远不会返回该内存。大多数 Java 虚拟机也以这种方式工作。因此,您不应期望 topps 中的解释器大小会减少,即使该堆内存未被使用也是如此。

更新:

代码已更改以便在 Python 3+ 中工作。

关于python - 在清除树时使用 ElementTree.iterparse() 时内存使用量是否应该增加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10074200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com