O desempenho do sistema de arquivos pode diminuir se houver um número muito grande de arquivos em um único diretório (NTFS)?

5

Ouvi dizer que o desempenho do sistema de arquivos (em uma partição NTFS) pode começar a diminuir se o número de arquivos em um único diretório se tornar muito grande (por exemplo: > = 10.000.000 itens). É verdade ?

Se verdadeiro, qual é o número máximo recomendado de arquivos em um único diretório?

EDITAR:

Sobre o desempenho: Estou pensando nas operações de arquivo dentro dessa pasta (ler, gravar, criar, excluir) que poderiam ficar lentas.

    
por tigrou 25.07.2013 / 09:01

2 respostas

7

Eu respondo a minha própria pergunta: Sim, definitivamente é mais lento.

Eu escrevi um C# Console Application que cria muitos arquivos vazios em uma pasta e, em seguida, acessa-os aleatoriamente. Aqui estão os resultados:

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

Aqui está o código-fonte:

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);
    
por 25.07.2013 / 13:03
1

Se você ler este , deverá compreender bem como o NTFS trabalha na indexação de arquivos e pastas.

Localmente, não deve ser uma grande quantidade de arquivos e pastas de indexação, se você seguir as orientações do link acima, mas precisará de muita manutenção com muitos arquivos.
Em uma rede, será outra história. Vai ser lento, isso é da minha própria experiência no trabalho, onde temos pastas com milhares de pastas e que leva algum tempo para indexar através de uma rede.

Outra coisa provavelmente para aumentar com tantos arquivos é desabilitar a abreviação de nomes :, o que irá impedir que o Windows crie uma segunda entrada de diretório de arquivos que seguirá o convenção 8.3 (convenção de nomenclatura de arquivo do MS-DOS) e diminuir o tempo para pastas para enumerar, porque ele não precisa procurar os nomes curtos associados com seus nomes longos ao enumerar .

  • Ir para Run no menu Iniciar
  • Digite cmd e, quando vir o prompt de comando, clique com o botão direito nele e selecione Run as administrator
  • Quando no prompt de comando , digite fsutil behavior set disable8dot3 1 para desabilitar a abreviação de nome
  • Reinicializar

Se você quiser ativá-lo novamente, digite fsutil behavior set disable8dot3 0

    
por 25.07.2013 / 09:50