我将文件从USB和网络映射共享驱动器复制到我的服务器。在复制文件之前,我正在进行某些验证,一旦验证完成,我就会将文件复制到目的地。使用System.Interop.Services进行重要验证是 CRC 验证。所有这些都是由用C#编写的Windows服务完成的。
问题:我的USB和映射网络驱动器模块都经过相同的代码,即执行CRC验证和复制的代码。
如果我使用800MB文件启动我的进程,则从USB进行验证,然后CRC验证最多需要30秒,最多可以复制1分钟。
从网络映射驱动器,如果我使用800MB文件启动我的进程,则CRC验证大约需要10分钟,最多可以复制1分钟。
如果速度快,那么我复制文件只需要1分钟的USB和Mapped Network Drive。只有在执行CRC(同样是USB和NT映射驱动器的相同代码和逻辑)时,我才能观察到这种差异。
添加信息:我使用.Net Framework,C#,wNetAddConnection来映射网络驱动器。
请求您的专家意见。
CRC验证代码:
internal class CRC
{
[System.Runtime.InteropServices.DllImport( "CRC.dll" )]
public static extern int Validate665Loadset( string pszLoadsetPath );
}
这就是我正在呼叫它并返回该值。如果它是ZERO则内容有效,否则不是。这就是逻辑。
答案 0 :(得分:1)
您是如何访问该文件的?是的,完全有可能只是非常不同的带宽,但CRC验证的时间是复制的相同来源(网络)的10倍,表明代码正在进行时髦的东西 - 因为基本上都涉及读取所有字节,它们应该大致相同(警告:操作系统可以在某些情况下优化复制方案 - 例如在多个网卡上复制单个文件)同一时间 - 如果将文件用作流,则无法实现。我怀疑首先要看的是缓冲区大小;或者可能添加一个明确的BufferedStream
。