【发布时间】:2012-09-06 21:23:03
【问题描述】:
我有一个项目,它扫描一个大文件 (2.5GB),挑选出字符串,然后将其写入数百个文件的某个子集。
使用普通缓冲写入会是最快的,但是
- 我担心文件句柄用完。
- 我希望能够在文件写入时查看它们的进度。
- 如果进程中断,我希望损失尽可能少。不完整的文件仍有部分用途。
所以我改为以读/写模式打开,添加新行,然后再次关闭。
这在很多时候已经足够快了,但我发现在某些操作系统上这种行为是一种严重的悲观。上次我在 Windows 7 上网本上运行它时,我在几天后中断了它!
我可以实现某种类型的 MRU 文件句柄管理器,它可以保持如此多的文件打开并在每个文件进行如此多的写入操作后刷新。但这是否矫枉过正?
这一定是常见的情况,有没有“最佳实践”、“模式”?
当前的实现是在 Perl 中,并且已经在 Linux、Solaris 和 Windows、上网本到 phat 服务器上运行。但我对一般问题感兴趣:语言无关和跨平台。我曾想过用 C 或 node.js 编写下一个版本。
【问题讨论】:
-
你是如何读取文件的?逐行?立刻? 2.5 没那么大。
-
我逐条阅读它,但这归结为逐行。似乎输入的大小并没有像我认为的输出的所有刷新一样减慢它的速度。
-
到目前为止我能找到的最相似的问题:Opening and writing to multiple files in C
标签: optimization io output-buffering filehandle