与c#中的USB相比,从映射的网络驱动器读取文件相当慢

本文关键字:读取 驱动器 网络 文件 映射 中的 USB 相比 | 更新日期: 2023-09-27 18:08:21

我正在从USB和网络映射的共享驱动器复制文件到我的服务器。在复制文件之前,我要做一些验证,一旦验证成功,我就把文件复制到目的地。有效验证是使用System.Interop.Services的CRC验证。所有这些都是由c#编写的Windows服务完成的。

问题:我的USB和映射的网络驱动器模块都经过相同的代码,即做CRC验证和复制的代码。

如果我用一个800MB的文件从USB启动我的进程,那么CRC验证最多需要30秒,复制最多需要1分钟。

如果我用一个800MB的文件启动我的进程,那么CRC验证大约需要10分钟,复制最多需要1分钟。

  1. 为什么会有这样的差异?
  2. 为什么同样的操作从USB比网络映射驱动器快得多?
  3. 仅仅是因为以太网的速度?还是其他技术上的东西?

如果它的速度,然后对我来说,复制文件只需要1分钟在USB以及映射的网络驱动器。只有在执行CRC(同样的代码&USB &NT映射驱动器)我正在观察这个差异。

附加信息:我已经使用。net Framework, c#, wNetAddConnection来映射网络驱动器。

征求你的专家意见。

CRC验证代码:

internal class CRC 
{ 
[System.Runtime.InteropServices.DllImport( "CRC.dll" )] 
public static extern int Validate665Loadset( string pszLoadsetPath );
} 

这是我调用的,它返回值。如果为0,则内容有效,否则无效。

与c#中的USB相比,从映射的网络驱动器读取文件相当慢

如何访问文件?是的,完全有可能有只是非常不同的带宽,但是CRC验证花费的时间是复制的10倍,对于相同的起源(网络)表明代码正在做一些奇怪的事情-因为基本上都涉及读取所有字节,它们应该是相同的(警告:在某些情况下,操作系统可以优化复制场景(例如,同时在多个网卡上复制单个文件——如果将文件用作流,这将是不可能的)。我怀疑首先要看的是缓冲区大小;或者可能添加显式的BufferedStream