File.Copy是基于CopyFile
Win32函数构建的,此功能引起了MS工作人员的广泛关注(请记住与Vista相关的线程有关缓慢的复制性能)。
改善您的方法性能的一些线索:
- 就像前面所说的,从您的循环中删除Flush方法。您根本不需要它。
- 增加缓冲区可能有所帮助,但仅对于文件共享操作,对于网络共享或ftp服务器,这会减慢速度。60 * 1024是网络共享的理想选择,至少在vista之前。对于ftp 32k,在大多数情况下就足够了。
- 通过提供您的缓存策略(在您的情况下为顺序读取和写入)来帮助OS,使用FileStream构造函数重写和FileOptions参数(SequentalScan)。
- 您可以使用异步模式来加快复制速度(对于网络到文件的情况尤其有用),但不要为此使用线程,而应使用重叠的io(.net中的BeginRead,EndRead,BeginWrite,EndWrite),并且不要忘记在FileStream构造函数中设置Asynchronous选项(请参见FileOptions)
异步复制模式示例:
int Readed = 0;IAsyncResult ReadResult;IAsyncResult WriteResult;ReadResult = sourceStream.BeginRead(ActiveBuffer, 0, ActiveBuffer.Length, null, null);do{ Readed = sourceStream.EndRead(ReadResult); WriteResult = destStream.BeginWrite(ActiveBuffer, 0, Readed, null, null); WriteBuffer = ActiveBuffer; if (Readed > 0) { ReadResult = sourceStream.BeginRead(BackBuffer, 0, BackBuffer.Length, null, null); BackBuffer = Interlocked.Exchange(ref ActiveBuffer, BackBuffer); } destStream.EndWrite(WriteResult); } while (Readed > 0);


