【发布时间】:2020-07-20 13:11:49
【问题描述】:
多年前,我注意到在 Delphi 7 中通过BlockRead() 读取大型二进制文件时,与每次读取 16384 字节的块相比,逐字节读取文件的速度要低得多,被读取。这显然意味着 Delphi 7 没有使用内部缓冲区(至少,默认情况下),并且每次 BlockRead() 直接从磁盘读取。
C 中的fread() 怎么样?开发人员应该自己/他自己管理缓冲,还是 C 库会处理它?我知道默认情况下,文本文件 I/O 在 C 中是缓冲的,据我所知,可以更改内部缓冲区的大小。
更新:我认为 Delphi 7 可能确实为打开的文件使用了内部缓冲区,但其默认大小很小。
【问题讨论】:
-
有很多级别的缓冲:磁盘设备驱动程序缓冲区、文件系统缓存、库/fread 缓冲区以及现在您的程序缓冲区……您的程序最清楚哪些块是经常需要的;缓存计数命中并刷新未使用的块,并将通过启发式方法接近您的程序的知识。也许不用担心。
-
您为什么不像使用 Delphi 那样简单地尝试一下?