gpt4 book ai didi

Windows 上的 Python。为什么读取文本比二进制文件慢 8 倍?

转载 作者:可可西里 更新时间:2023-11-01 10:32:33 25 4
gpt4 key购买 nike

我在 Windows 10(均为 64 位)上运行 python 3.6,配备快速 SSD、32GB RAM 和非常快的处理器 (AMD Threadripper)。我在 Intel i7 上也得到了类似的结果。我正在打开大小约为 5MB 的 XML 文本文件,发现即使使用 lxml 性能也非常慢。我将问题归结为磁盘读取性能。如果我以二进制方式加载,速度会快 8 倍以上。以下测试是对已在磁盘缓存中的文件执行的。在这些运行期间磁盘从未被击中。冷读也得到了类似的结果。

%%timeit
with open(xmlpath + fn, 'rb') as f:
r = f.read()
1.66 ms ± 31.3 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%%timeit
with open(xmlpath + fn, 'r', encoding='UTF-8') as f:
r = f.read()
13.7 ms ± 32.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

我知道必须为文本版本处理编码,但在快速处理器上运行速度慢 8 倍似乎过分了。此外,1.6 毫秒对我来说似乎很慢,无法读取已经在缓存中的这么小的文件。使用 Passmark 测量的磁盘性能符合预期 > 2GB/s。

如有任何意见/建议,我们将不胜感激。谢谢。

最佳答案

当您使用 rb 时,可以直接在最终缓冲存储器 (r) 中以无限/非常大的 block 大小读取文件。

当您使用 r 时,必须以较小的 block 大小读取文件,以便能够对 block 进行后处理并删除 \r \n 字符之前的字符(如果它不是逐个字符完成的,这将是最简单但最慢的方法)

如果你有能力复制内存(r 模式做不到),我建议:

with open(xmlpath + fn, 'rb') as f:
r = f.read().decode('UTF-8').replace('\r','')

还可以按照评论所述保存解码和替换:

with open(xmlpath + fn, 'r', newline="") as f:
r = f.read()

关于Windows 上的 Python。为什么读取文本比二进制文件慢 8 倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47354889/

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