C# 文件。删除和目录。删除网络性能

C# 文件。删除和目录。删除网络性能,c#,file-io,C#,File Io,有人知道如何执行文件.Delete和目录.Delete吗 我的意思是:如果假设我在网络上删除一些文件/文件夹,而网络相当慢,会发生什么 它会像本地一样快速完成吗?它会比将文件移动到那个网络位置消耗更多的带宽吗 它们都是同步运行的——也就是说,它们都在等待任务完成后再将控制权返回给调用方。因此,通过网络呼叫他们删除文件或目录需要更长的时间。这不会像本地那样快。它会很慢,延迟取决于您的网络状况 您不会将Delete命令“远程”发送到“智能端”,智能端知道如何将文件夹作为原子操作删除。您的代码实际上是

有人知道如何执行
文件.Delete
目录.Delete

我的意思是:如果假设我在网络上删除一些文件/文件夹,而网络相当慢,会发生什么


它会像本地一样快速完成吗?它会比将文件移动到那个网络位置消耗更多的带宽吗

它们都是同步运行的——也就是说,它们都在等待任务完成后再将控制权返回给调用方。因此,通过网络呼叫他们删除文件或目录需要更长的时间。

这不会像本地那样快。它会很慢,延迟取决于您的网络状况

您不会将
Delete
命令“远程”发送到“智能端”,智能端知道如何将文件夹作为原子操作删除。您的代码实际上是针对“哑”的网络位置运行的,并且会逐个文件删除


至于你的最后一个问题,
Delete
几乎总是比
Move
快。当您跨磁盘(当然也跨网络位置)移动文件时,实际上是一个复制操作(末尾有一个“删除”)。

它们基本上使用了相应的本机Win32 API,这意味着性能几乎与本机应用程序相同(在.NET和本机之间没有真正的区别)


基本上,当在网络驱动器/路径/共享上执行时,所有文件I/O都会变慢—因此:是的,与本地执行的相同操作相比,它们会变慢。慢多少取决于几个方面,包括(但不限于)网络延迟、服务器、文件系统性能等。

它们都调用win32 api来完成工作

这是来自反射器7:

[SecuritySafeCritical]
public static void Delete(string path)
{
    if (path == null)
    {
        throw new ArgumentNullException("path");
    }
    string fullPathInternal = Path.GetFullPathInternal(path);
    new FileIOPermission(FileIOPermissionAccess.Write, new string[] { fullPathInternal }, false, false).Demand();
    if (!Win32Native.DeleteFile(fullPathInternal))
    {
        int errorCode = Marshal.GetLastWin32Error();
        if (errorCode != 2)
        {
            __Error.WinIOError(errorCode, fullPathInternal);
        }
    }
}
它会像本地一样快速完成吗

不,速度很慢,因为windows-directory中没有删除目录。删除列出网络上的所有文件,然后删除它们。与windows资源管理器相同。根据文件的数量,这可能需要时间。删除30.000个文件首先列出它们,然后列出30.000个单独的删除操作

它会比将文件移动到那个网络位置消耗更多的带宽吗


不,不会,因为文件从未移动过。复制文件总是比删除文件慢得多。

它们通过Win32 api包装调用

通过这里的免费工具查看它们的功能。


或者付费选择

删除操作如何比移动操作“消耗更多带宽”?你到底在说什么样的带宽?我知道比较移动和删除是毫无意义的。但我只是想知道删除和移动相比执行时间有多长。我本应该说得更清楚一点几乎不是这个问题,是的,通过网络删除要比在本地删除慢得多。@TomTom我怀疑你没有读我答案的第二段?@TomTom另一点:OP问题的第一部分是关于“他们如何执行”我在第一段中回答了这个问题,其余的问题是关于性能的,我在第二段中回答了这个问题……shell中有用于删除目录的
rd
-命令。我不知道为什么GUI不使用相同的功能——除了给用户一个单击取消的机会之外。