我想从文件中读取字节,处理它们,然后将进程的输出写入另一个文件。由于读/写是瓶颈(处理速度很快),我应该能够通过同时读写来将速度提高一倍(如果文件在不同的驱动器上)。
我可以通过进程间通信来做到这一点,但这似乎有些过分。是否有简单的方法来实现这一目标?
修改
也许我不够清楚。我想要以下内容:
编辑2
@downvoters关心解释原因? 明显是什么dasblinkenlight写道,它甚至不配一个问题?我怀疑我是唯一那个不知道的人。答案 0 :(得分:2)
我应该能够通过同时阅读和写作几乎使速度加倍。
除非您一次读取内存中的整个文件,否则不太可能将速度提高一倍,因为操作系统会通过readahead优化读取延迟。
操作系统应用参考局部性原则:它会快速确定您的程序是按顺序读取的,并使用预读来预取接下来的几个块。当您的程序完成编写并准备再次读取时,数据已经在缓冲区中,因此操作系统将为您的程序提供服务。在您的程序等待写入完成的时间内,操作系统将完成更多数据,因此循环将继续,几乎不会在读取端等待。
作为实验问题,您可以尝试使用asynchronous I/O和ReadAsync
API来使用WriteAsync
自己的程序。该过程如下:
Task pendingWrite = null
ReadAsync
和await
完成await
完成WriteAsync
启动下一次写入,并将任务分配给pendingWrite
await
完成上一个周期的pendingWrite
任务。