5

Я слышал, что производительность файловой системы (в разделе NTFS) может начать уменьшаться, если количество файлов в одном каталоге становится очень большим (например:> = 10.000.000 элементов). Это правда ?

Если это правда, какое рекомендуемое максимальное количество файлов в одном каталоге?

РЕДАКТИРОВАТЬ:

О производительности: я думаю о файловых операциях внутри этой папки (чтение, запись, создание, удаление), которые могут быть медленными.

2 ответа2

7

Я отвечаю на свой вопрос: да, это определенно медленнее.

Я написал 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

Если вы прочитаете это, вы должны получить довольно хорошее представление о том, как NTFS работает при индексировании файлов и папок.

Локально, это не должно быть большой частью индексации файлов и папок, если вы будете следовать рекомендациям, приведенным в ссылке выше, но для этого потребуется много обслуживания с таким количеством файлов.
В сети это будет другая история. Это будет медленно, это из моего собственного опыта на работе, где у нас есть папки с тысячами папок, и для индексации по сети требуется некоторое время.

Другая вещь, которую, вероятно, следует увеличить с таким количеством файлов, - это отключение коротких имен: это не позволит Windows создавать вторую запись каталога файлов, которая будет следовать соглашению 8.3 (соглашение об именах файлов MS-DOS), и уменьшит время для папок до перечислять, потому что при перечислении не нужно искать короткие имена, связанные с их длинными именами.

  • Перейти Run в меню Пуск
  • Введите cmd и когда вы увидите командную строку, щелкните правой кнопкой мыши на ней и выберите Run as administrator
  • Когда в командной строке введите fsutil поведение, установите disable8dot3 1, чтобы отключить короткие имена
  • перезагружать

Если вы хотите включить его снова, введите fsutil поведения set disable8dot3 0

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .