Windows XP 缓慢目录移动

Windows XP 缓慢目录移动

当我将一个包含 900 MB 4k 文件的目录移动到同一文件系统中的另一个目录时,需要将近 1 分钟,然后我听到磁盘正在工作。它是 Windows XP 上的 NTFS,磁盘速度相当快(ST3100015 28AS),并且根据 CrystalMark 的测试,磁盘运行良好。我关闭了防病毒软件,没有其他程序在运行(有很多进程,但没有一个在执行任何工作)。

它到底在做什么,而不是改变两个目录条目?

答案1

您在这里做出的错误假设是,移动 Explorer 文件夹中的子文件夹项是一个简单的操作,仅涉及修改几个目录条目。事实并非如此。移动文件的低级系统调用可能是。但 Microsoft Windows Explorer 在其之上放置了多个层。文件夹项的“移动”可能最终在低级上成为“复制到新名称然后删除原始内容”,而不是“将此目录条目重命名为该父目录”。当然,前者比后者要昂贵得多。

Explorer 为什么要这样做?首先,这是因为文件夹不是目录。Explorer 向用户呈现的“文件夹”并非都是磁盘卷上真正的目录。例如,Explorer 必须弄清楚将目录从/移动到表示智能手机上通过蓝牙 FTP 连接查看的远程文件的虚拟文件夹意味着什么。这不是原始系统 API 级别的简单重命名操作。回收站也是如此,其在原始文件和目录级别的实际表达是文件系统格式特定的

Explorer 有一个“引擎”,可以计算出 shell 对象的“复制”、“移动”、“重命名”和“删除”操作在原始系统 API 级别上的实际含义。在 Windows NT 6.0 及更高版本中的 Explorer 中,“移动”操作是IFileOperation::MoveItem()方法(过去是SHFileOperation()功能)还有很多不明显的事在发生,即使有人可能错误地认为 map 是一个简单的“重命名”系统调用,以提供最终用户可见的“移动”资源管理器中的子文件夹项的语义。这包括以下所有处理所有可以设置的操作标志,其中包括撤消信息记录、碰撞检测和自动重命名、检查最后修改日期戳,覆盖旧的安全描述符,并更新进度对话。

如果你想测试更改几个目录条目需要多长时间,可以使用一个应用程序只做那件事,并且不执行其上的所有 Explorer 层,例如命令mv

答案2

看起来 Explorer 有一种强迫症,会检查是否存在它不想移动的文件。这包括只读文件、可执行文件等等(好像我可以重新安装的程序比我自己的文件更有价值)。这个检查似乎是问题所在。当我使用其他程序移动目录时,速度要快得多,但仍然需要一到两秒钟。

有人能测量一下他们的电脑需要多长时间吗?我复制了 Windows 目录作为要使用的目录。

答案3

如果您安装了挂钩 Explorer 中的文件操作的工具,则可能会导致速度变慢。HardLinkShellExt 可以做到这一点,其他工具也可以。查看您安装了哪些 shell 扩展。

答案4

这几乎就是它所做的全部工作,但是,4000 个文件很多,并且比一个 900mb 的文件花费的时间要长得多。

打开 YouTube 并在等待时观看一些东西,或者只是更加耐心!

相关内容