栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

File.Copy与手动FileStream.Write用于复制文件

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

File.Copy与手动FileStream.Write用于复制文件

File.Copy是基于CopyFile
Win32函数构建的,此功能引起了MS工作人员的广泛关注(请记住与Vista相关的线程有关缓慢的复制性能)。

改善您的方法性能的一些线索:

  1. 就像前面所说的,从您的循环中删除Flush方法。您根本不需要它。
  2. 增加缓冲区可能有所帮助,但仅对于文件共享操作,对于网络共享或ftp服务器,这会减慢速度。60 * 1024是网络共享的理想选择,至少在vista之前。对于ftp 32k,在大多数情况下就足够了。
  3. 通过提供您的缓存策略(在您的情况下为顺序读取和写入)来帮助OS,使用FileStream构造函数重写和FileOptions参数(SequentalScan)。
  4. 您可以使用异步模式来加快复制速度(对于网络到文件的情况尤其有用),但不要为此使用线程,而应使用重叠的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);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/416814.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号