0

我正在尝试为 Stata 文件类型优化二进制阅读器,并且对文件中的每条记录进行懒惰评估。随着文件大小的增加,阅读器的速度会很快下降。

当我问最初写它的人为什么要使用生成器时,他说要注意记忆。我得到的建议是一次读取和处理更大的文件块,我想知道如何判断我可以在不进入虚拟内存的情况下读取的最大块是多少。

一些旁注

  • 为什么读取和处理大块比小块更快。多次调用的间接费用成本加起来这么快吗?
  • 我很想看看我是否可以通过尝试 Cython 来获得更大的速度提升。有谁知道我可以查看的带有二进制文件阅读器的任何模块(除了 scipy.stats matlab 文件阅读器)?
4

1 回答 1

1
  • 我想知道如何判断我可以在不进入虚拟内存的情况下读取的最大块是多少。

我不确定“不进入虚拟内存”是什么意思,但这高度依赖于文件格式、存储介质和文件系统/操作系统等细节。最好凭经验确定。如果可以,请实现一个参数chunk_size(或n_records,或其他)来确定一次读取多少条记录。

  • 为什么读取和处理大块比使用小块更快

取决于正在阅读的代码。这可能是由于系统调用开销,或者因为 Python 代码必须在读取之间执行。

  • 有谁知道任何带有二进制文件阅读器的模块我可以看看

我在 Cython 中共同编写了LibSVM/SVMlight 文件格式的加载器,这是一种用于稀疏矩阵的简单文本格式。它作为 scikit-learn 的一部分分发。

于 2013-04-21T17:12:01.660 回答