gpt4 book ai didi

python - 为什么 StringIO 对象比真实文件对象慢?

转载 作者:太空狗 更新时间:2023-10-30 00:02:49 25 4
gpt4 key购买 nike

我正在查看 StringIO 的源代码,它说了一些注释:

  1. 使用真实文件通常更快(但不太方便)
  2. 在 C 中还有一个更快的实现,称为 cStringIO,但是它不可继承。

StringIO 就像一个内存文件对象,为什么它比真正的文件对象慢?

最佳答案

不是实际上是关于 Python 的解释性质:BytesIO 是在 Python* 中实现的,与 StringIO 相同,但仍然优于文件 I/哦。

事实上,在 StringIO 的理想用例(单次写入空缓冲区的开头)下,StringIO 比文件 I/O 更快。实际上,如果写入足够大,它甚至会击败 cStringIO。看我的问题here .

那么为什么 StringIO 被认为是“慢”的呢? StringIO 的真正问题是由不可变序列 支持的,无论是str 还是unicode。显然,如果你只写一次,这很好。但是,正如 tdelaney's answer 指出的那样对于我的问题,它在写入随机位置时会减慢很多(例如 10-100 倍),因为每次它在中间写入时都必须复制整个支持序列。

BytesIO 没有这个问题,因为它由(可变的)bytearray 支持。同样,无论 cStringIO 做什么,它似乎都更容易处理随机写入。我猜它在内部打破了不变性规则,因为 C 字符串是可变的。

* 无论如何,_pyio 中的版本是。 io 中的标准库版本是用 C 语言编写的。

关于python - 为什么 StringIO 对象比真实文件对象慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25580925/

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