同时从一个文件读取并写入另一个文件

时间:2017-04-05 18:26:38

标签: c# .net

我想从文件中读取字节,处理它们,然后将进程的输出写入另一个文件。由于读/写是瓶颈(处理速度很快),我应该能够通过同时读写来将速度提高一倍(如果文件在不同的驱动器上)。

我可以通过进程间通信来做到这一点,但这似乎有些过分。是否有简单的方法来实现这一目标?

修改

也许我不够清楚。我想要以下内容:

  1. 阅读chunk
  2. 处理它
  3. 开始编写输出
  4. 写作时转到1
  5. 编辑2

    @downvoters关心解释原因? 明显是什么dasblinkenlight写道,它甚至不配一个问题?我怀疑我是唯一那个不知道的人。

1 个答案:

答案 0 :(得分:2)

  

我应该能够通过同时阅读和写作几乎使速度加倍。

除非您一次读取内存中的整个文件,否则不太可能将速度提高一倍,因为操作系统会通过readahead优化读取延迟。

操作系统应用参考局部性原则:它会快速确定您的程序是按顺序读取的,并使用预读来预取接下来的几个块。当您的程序完成编写并准备再次读取时,数据已经在缓冲区中,因此操作系统将为您的程序提供服务。在您的程序等待写入完成的时间内,操作系统将完成更多数据,因此循环将继续,几乎不会在读取端等待。

作为实验问题,您可以尝试使用asynchronous I/OReadAsync API来使用WriteAsync自己的程序。该过程如下:

  1. 在进入循环之前,请设置Task pendingWrite = null
  2. ReadAsyncawait完成
  3. 开始阅读
  4. 如果没有其他可用数据,请退出循环(步骤8)
  5. 根据需要处理数据
  6. 查看是否有待处理的写入任务。如果有,await完成
  7. 使用WriteAsync启动下一次写入,并将任务分配给pendingWrite
  8. 返回第2步
  9. await完成上一个周期的pendingWrite任务。