如何确定文件I / O的最大读取缓冲区大小

时间:2013-04-21 16:53:48

标签: python optimization io cython

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

当我问起最初写它的人为什么使用发电机时,他说这是记忆小心的。我给出的建议是一次读取并处理更大的文件块,我想知道如何在不进入虚拟内存的情况下告诉我可以读取的最大块是什么。

一些附注

  • 为什么读取和处理大块比使用小块更快。多次调用开销的成本是否会快速增加?
  • 我有兴趣看看我是否可以通过尝试Cython来获得更大的速度提升。有没有人知道任何带有二进制文件阅读器的模块我可以看看(除了scipy.stats matlab文件阅读器)?

1 个答案:

答案 0 :(得分:1)

  • 我想知道如何在不进入虚拟内存的情况下告诉我能阅读的最大块是什么。

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

  • 为什么阅读和处理大块的速度比使用小块更快?

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

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

我在Cython中共同编写了一个loader for the LibSVM/SVMlight file format,一种简单的稀疏矩阵文本格式。它是作为scikit-learn的一部分发布的。

相关问题