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

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

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

如果是真,那么建议单个目录中的最大文件数是多少?

编辑:

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

答案1

我自己回答这个问题:是的,确实慢点。

我编写了一个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);

答案2

如果你读那么您应该对 NTFS 如何索引文件和文件夹有相当好的理解。

如果您遵循上述链接中的指南,在本地索引文件和文件夹应该不会太麻烦,但要处理这么多文件,需要进行大量维护。
在网络上则另当别论。它会很慢,这是我在工作中的经验,我们的文件夹有数千个文件夹,通过网络进行索引需要一些时间。

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

  • 转至Run开始菜单
  • 输入cmd,当您看到命令提示符时,右键单击它并选择Run as administrator
  • 当在命令提示符类型fsutil 行为设置 disable8dot3 1禁用短命名
  • 重启

如果你想再次启用它,请输入fsutil 行为设置 disable8dot3 0

相关内容