文件.删除和目录.删除网络性能

本文关键字:删除 网络 性能 文件 | 更新日期: 2023-09-27 18:25:52

有人知道File.DeleteDirectory.Delete如何执行吗?

我的意思是:如果假设我要通过网络删除一些文件/文件夹并且网络速度相当慢,会发生什么?

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

文件.删除和目录.删除网络性能

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

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

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

它们都调用 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.Delete 列出网络上的所有文件,然后删除它们。与窗口资源管理器相同。根据文件的数量,这可能需要一些时间。删除 30.000 个文件首先列出它们,然后列出 30.000 个单独的删除操作。

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

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

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

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

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

它们通过 Win32 API 包装调用。

通过免费工具查看他们的功能 此处.伊尔斯皮

或付费的替代反射器