我正在使用 lxml.etree
从许多 XML 文件中加载数据,但是在完成初始解析后,我希望关闭它们。目前,在下面的代码中,XML_FILES
列表占用了程序使用的 400 MiB 内存的 350 MiB。我尝试过 del XML_FILES
、del XML_FILES[:]
、XML_FILES = None
、for etree in XML_FILES: etree = None
等等一些方法,但这些似乎都没有起作用。我也找不到任何关闭 lxml 文件的方法。下面是执行解析的代码:
def open_xml_files():
return [etree.parse(filename) for filename in paths]
def load_location_data(xml_files):
location_data = {}
for xml_file in xml_files:
for city in xml_file.findall('City'):
code = city.findtext('CityCode')
name = city.findtext('CityName')
location_data['city'][code] = name
# [A few more like the one above]
return location_data
XML_FILES = utils.open_xml_files()
LOCATION_DATA = load_location_data(XML_FILES)
# XML_FILES never used again from this point on
现在,我该如何摆脱这里的XML_FILES?
del
确实释放了结构体,但内存由malloc
在进程中保留。 - Fred Foomemory_profiler
据我所知,存在一个问题,即根据内核而不是malloc
来测量进程的内存使用情况。该进程可能会保留内存以供稍后重用。尝试加载XML,然后使用del
删除,再次加载并检查内存使用情况是否实际上翻倍。 - Fred Foo