我们在 Windows 2008 上有一个 IIS-7 服务器。一个自定义 Web 应用程序将客户端上传到 NTFS 分区的文件写入其中。每年我们有 40,000-60,000 个文件夹,每个文件夹包含 2-20 个文件。尝试在资源管理器中打开该年的文件夹是一个问题,并且可能需要几分钟才能构建文件夹列表。这让我很疑惑,这是否是整个系统的问题?
我想更简单的问题是,如果我们的网络应用程序通过精确的路径直接访问文件,那么拥有成千上万个文件是否仍然会减慢速度?
答案1
Windows(NTFS)不会永久缓冲 $MFT - 根据内存,可能(很好地考虑到大小)需要从磁盘读取它,这可能需要相当长的时间并停止所有卷访问尝试。
我已经为此奋斗了一段时间,唯一的解决办法是减少目录大小。不要将(扁平的)例如 \2017-07-20.log 等放在一个巨大文件夹中,而是使用 \2017\07\2017-07-20.log。这样,文件夹就不会超出大小,而且(假设当前文件夹的访问频率更高)文件夹访问的局部性会得到极大改善。
如果您不能这样做,唯一的补救措施是通过剥离 8.3 名称来减少 $MFT 大小,而不是使用过于复杂的名称、ACL、审计等。
另一个补救措施是在机器中添加内存以改善缓存。