KingKwon

回首向来萧瑟处,归去,也无风雨也无晴
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

C#的同步/异步文件操作释疑

Posted on 2017-05-10 16:32  KingKwon  阅读(718)  评论(0编辑  收藏  举报

先来说说同步和异步操作之间的主要区别:

      在同步I/O操作中,方法将一直处于等待状态,直到I/O操作完成。

      而在异步I/O操作中,在开始了I/O操作后,程序的方法可以转移去执行其它的操作,这样大大提高了程序执行的效率。

 

由于Windows是一个多任务的操作系统,在同一时刻系统可能会接受到多个I/O操作请求,要求对磁盘文件执行各种操作

      如果采用同步方式,那么每时每刻最多只能有一个I/O操作在进行,而其它的任务都处于等待状态,系统的利用率将会大为降低。

      异步I/O操作则较好地解决了这种性能上的问题。

 

Stream类支持在同一个流中既可以进行同步读写,也可以进行异步读写。

     Stream类是一个抽象类,它为我们提供了BeginRead、BeginWrite、EndReader、EndWrite、Read、Write、Seek等成员方法,协同完成对流的读写操作。

     所有这些方法都是虚方法。因此,在我们自己设计Stream类的派生类时,我们在类用于读写的成员方法Read和Write中应该重载这些方法,并同时设计它们同步和异步的执行代码。

     BeginRead,EndRead,BeginWrite和EndWrite方法默认为我们提供的是异步读写操作方式,如果你的派生类的Read和Write方法执行同步操作时,

     那么程序提供的效率不会很好。只有当它们执行异步操作时,我们才能有效地提高程序的执行效率。