我目前正在使用替换选择和k路合并来处理涉及外部合并排序的项目。我用C++ [在Linux上运行]实现了该项目。它非常简单,现在只处理固定大小的记录。提高C++程序的I/O性能[外部合并排序]
对于阅读&写我使用(I/O)fstream类。执行该程序几次后,我注意到
- 对于大于4K(典型块大小)的请求,I/O读取块。事实上,缓冲区大小超过4K会导致性能下降。
- 输出操作似乎不需要缓冲,linux似乎照顾缓冲输出。所以我发出一个写(记录),而不是保持特殊的写入缓冲区,然后使用write(records [])立即清除它们。
但是,应用程序的性能似乎不是很好。我怎么能改善表现?我应该维护特殊的I/O线程来处理读取块或者是否存在提供此抽象的现有C++类?(类似于Java中的BufferedInputStream)
简介第一!对于大于最佳块大小的性能,性能只会缓慢下降,因此可能不会成为第一个问题。 – Potatoswatter 2010-04-23 01:49:05
对于> 4096字节的缓冲区,它们是512的精确倍数吗? – wallyk 2010-04-23 01:51:13
4k的东西是有道理的。这通常是许多文件系统的本地块大小,也是x86的本地页面大小。 – 2010-04-23 03:53:51