gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:47:48 25 4
gpt4 key购买 nike

我正在将文件从 USB 和网络映射共享驱动器复制到我的服务器。在复制文件之前,我会进行某些验证,一旦验证正常,我就会将文件复制到目标位置。重要的验证是使用 System.Interop.Services 的 CRC 验证。所有这些都是由用 C# 编写的 Windows 服务完成的。

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

如果我使用 800MB 的文件从 USB 开始我的过程,那么 CRC 验证最多需要 30 秒,复制最多需要 1 分钟。

如果我使用 800MB 的文件从网络映射驱动器开始我的进程,那么 CRC 验证大约需要 10 分钟,复制最多需要 1 分钟。

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

如果速度够快,那么我在 USB 和映射网络驱动器中复制文件只需要 1 分钟。只有在执行 CRC 时(USB 和 NT 映射驱动器的代码和逻辑相同)我才观察到这种差异。

补充信息:我使用 .Net Framework、C#、wNetAddConnection 来映射网络驱动器。

征求您的专家意见。

CRC 验证代码:

internal class CRC 
{

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

}

这就是我正在调用的,它会返回值。如果它为零,则内容有效,否则无效。这就是逻辑。

最佳答案

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

关于c# - 与 C# 中的 USB 相比,从映射的网络驱动器读取文件非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24199271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com