文件.删除和目录.删除网络性能
本文关键字:删除 网络 性能 文件 | 更新日期: 2023-09-27 18:25:52
有人知道File.Delete
和Directory.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 包装调用。
通过免费工具查看他们的功能 此处.伊尔斯皮
或付费的替代反射器