为什么FileStream和CopyFile比Windows资源管理器慢得多?
发布时间:2020-12-14 03:59:00 所属栏目:Windows 来源:网络整理
导读:我正在尝试通过网络( Windows Server 2008 R2到Windows 7 SP1 Enterprise)复制文件,当我使用Windows资源管理器拖放时,我的速度大约为4.5 MB / s. (这是一个WAN连接) 但是,当我使用FileStream.Read()时,我只能达到1.5 MB / s左右.我尝试过不同的缓冲区大小,范
我正在尝试通过网络(
Windows Server 2008 R2到Windows 7 SP1 Enterprise)复制文件,当我使用Windows资源管理器拖放时,我的速度大约为4.5 MB / s. (这是一个WAN连接)
但是,当我使用FileStream.Read()时,我只能达到1.5 MB / s左右.我尝试过不同的缓冲区大小,范围从1 KB到4 MB.我也尝试过使用CopyFile()和CopyFileEx(),但我得到了相同的结果. 可能会发生什么,我该如何修复我的代码? 编辑:我也尝试使用TeraCopy(第三方工具),它也只有1.5 MB / s. 解决方法
我不知道你是否还在经历这个问题,但我已经和这个问题搏斗了好几天,所以我想我会发布这个.我终于找到了一个与Explorer复制例程相当的解决方案.我不知道这是否适用于FileStream,但我能够使用CopyFile或CopyFileEx来获得相同的性能.就我而言,CopyFileEx是一个更好的选择,因为我想要一个进度回调.在使用Process Monitor检查复制过程之后,我注意到系统在每个32k块复制的每次读写操作之前重置了流的位置(即使它没有移动)(因此性能很差).在任何一种情况下,密钥都是在开始复制操作之前使用FileIOPermission在源文件和目标文件上设置IO权限.
以下是我的代码中的相关摘录: new FileIOPermission(FileIOPermissionAccess.Read,SourcePath).Demand(); new FileIOPermission(FileIOPermissionAccess.Write,DestinationPath).Demand(); if (!NativeCopy.CopyFileEx(SourcePath,DestinationPath,new NativeCopy.CopyProgressRoutine(this.CopyProgressHandler),GCHandle.ToIntPtr(hArgs),ref pbCancel,flags)) { throw new IOException(new System.ComponentModel.Win32Exception().Message); } 希望这会有所帮助.它让我疯狂地想弄清楚发生了什么. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Microsoft .NET Framework多个远程代码执行漏洞(MS09-061)
- windows – 在下次更改密码时更改密码过期策略
- windows-ce – 从桌面控制wince设备
- Windows API一日一练 48 PostThreadMessage函数
- 在Windows上在Ruby 1.9.1上安装Hpricot
- Windows系统下的TCP参数优化
- 在Go中,如何自动将循环索引强制转换为uint?
- Microsoft.WindowsAzure.targets“指定的路径,文件名或两者
- 项目1:交换机后台管理(2)
- 无法在Windows 10上使用python2.7/MINGW安装pyslalib软件包
推荐文章
站长推荐
热点阅读