如果单个目录(NTFS)中有大量文件,文件系统性能会降低吗?


5

我听说如果单个目录中的文件数量变得非常庞大(例如:> = 10.000.000项),则文件系统性能(在NTFS分区上)可能会开始下降。是真的吗

如果为true,则单个目录中建议的最大文件数是多少?

编辑:

关于性能:我正在考虑该文件夹内的文件操作(读取,写入,创建,删除),这可能会变慢。



是。MSDN建议不要在单个目录中保留超过20k个文件。(Windows Vista 2gb Ram)-我注意到,当它开始超过40k(Windows 7 4gb Ram)时,它会停顿下来。一切都挂起并停止工作。但是拥有10万个子目录根本不会影响速度:)
Piotr Kula

Answers:


6

我回答我自己的问题:是的,速度肯定慢一些。

我写了一个C# Console Application在文件夹中创建许多空文件,然后随机访问它们的文件。结果如下:

10 files in a folder        : ~26000 operation/sec
1.000.000 files a in folder : ~6000 operation/sec

这是源代码:

List<string> files = new List<string>();

Console.WriteLine("creating files...");
for (int i = 0; i < 1000 * 1000; i++)
{
    string filename = @"C:\test\" + Guid.NewGuid().ToString();
    using (File.Create(filename));
    files.Add(filename);
}

Console.WriteLine("benchmark...");            
Random r = new Random();
Stopwatch sw = new Stopwatch();
sw.Start();

int count = 0;
while (sw.ElapsedMilliseconds < 5000)
{
    string filename = files[r.Next(files.Count)];
    string text = System.IO.File.ReadAllText(filename);
    count++;
}
Console.WriteLine("{0} operation/sec ", count / 5);

+1代码。我发现只要有1000个以上的文件,时间就非常相似,相差1k或300k。少于1000个文件,取决于文件数。
wezten

1
为了有用,您需要比较一些随机存储和访问1M文件的方法。例如,制作1000个子文件夹,每个子文件夹包含1000个文件,然后随机访问这些1M文件。
制造商史蒂夫

2

如果您读过这篇文章,那么您应该对NTFS如何为文件和文件夹建立索引有了一个很好的了解。

在本地,如果您遵循上面链接中的准则,那么索引文件和文件夹就不应该太麻烦了,但是要对这么多文件进行大量维护。
在网络上这将是另一个故事。速度会很慢,这是基于我自己的工作经验,在那里我们有成千上万个文件夹,并且需要一些时间才能通过网络建立索引。

随着文件数量增加而可能增加的另一件事是禁用短命名:这将阻止Windows创建遵循8.3约定(MS-DOS文件命名约定)的第二个文件目录条目,并减少文件夹创建时间。进行枚举,因为在枚举时不必查找与长名称相关联的短名称。

  • Run开始菜单中转到
  • 键入,cmd然后在看到命令提示符时,右键单击它并选择Run as administrator
  • 命令提示符下键入fsutil behavior时,请设置disable8dot3 1以禁用短命名
  • 重启

如果要再次启用它,请键入fsutil behavior set disable8dot3 0


1
并非完全正确。您是否曾经尝试过无调整地访问包含80k文件的文件夹(例如服务器上的电子邮件文件夹错误)。您可以等待一天,然后再枚举。
Piotr Kula

当然,并非在所有情况下都并非如此,但是我仍然相信,如果您正确执行并定期维护它,那么您就可以拥有一个工作系统。您的不良电子邮件文件夹是什么意思?
Jesper Jensen

1
显然,您以前从未处理过邮件服务器:)您需要在答案中写下,如果它得到很好的维护(大约80%的系统管理员不这样做),那么就不会有问题。除了您的答案外,您还没有真正谈到读写性能以及禁用8dot3会影响性能的事情。也没有确凿的事实确实有帮助。抱歉让您感到痛苦..但是您的答案需要改进。-1直到您这样做。让我知道
Piotr Kula

我从未说过我已经处理过邮件服务器,或者以上内容是基于我的经验(网络部分除外):)。维持不变是我的回答。but it will need alot of maintenance with that many files但是,感谢您的批评,我将尽力改善自己的回答。
Jesper Jensen

请参阅StephenR在此答案上的评论-禁用8.3后,如果已经有很多文件,则需要删除现有的8.3名称以提高速度。
制造商史蒂夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.