【发布时间】:2011-02-01 08:25:25
【问题描述】:
我有以下循环:
for fileName in fileList:
f = open(fileName)
txt = open(f).read()
analyze(txt)
fileList 是一个包含超过 100 万个小文件的列表。根据经验,我发现对 open(fileName) 的调用占用了循环运行时间的 90% 以上。你会做什么来优化这个循环。这是一个“仅限软件”的问题,购买新硬件不是一种选择。
关于这个文件集合的一些信息:
每个文件名都是一个 9-13 位的 ID。这些文件根据 ID 的前 4 位排列在子文件夹中。这些文件存储在 NTFS 磁盘上,我宁愿不更改磁盘格式,因为我不会进入,除非这里有人坚信这样的更改会产生巨大的影响。
解决方案
谢谢大家的回答。
我的解决方案是传递所有文件,解析它们并将结果放入 SQLite 数据库。不,我对数据执行的分析(选择几个条目,做数学)只需要几秒钟。已经说过,读取部分占用了大约 90% 的时间,因此与不必从磁盘读取实际文件的效果相比,提前解析 XML 文件对性能的影响很小。
【问题讨论】:
标签: performance language-agnostic file-io ntfs