Расчет размеров каталогов

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

Неожиданным для меня оказалось то, что основная часть времени (дисковый ввод-вывод) уходит на создание дерева каталогов, а затем просмотр FileInfo[]выполняется почти мгновенно, практически без диска. Ввод/вывод.

Я пытался использовать оба Directory.GetDirectories(), просто создавая дерево строк имен каталогов и используя объект DirectoryInfo, и оба метода по-прежнему принимают большая часть времени ввода-вывода (конечно, чтение MFT) по сравнению со всем FileInfo.Lengthдля файлов в каждом каталоге.

Я полагаю, что нет способа значительно сократить ввод-вывод для создания дерева, я думаю, мне просто интересно, почему эта операция занимает значительно больше времени по сравнению с просмотром большего количества файлов?

Кроме того, если бы кто-нибудь мог порекомендовать нерекурсивный способ подсчета (поскольку кажется, что мне нужно просто разделить перечисление и сбалансировать его, чтобы сделать подсчет размера более отзывчивым).Создавать поток для каждого подкаталога вне базы и позволить конкуренции планировщика сбалансировать ситуацию, вероятно, было бы не очень хорошо, не так ли?

РЕДАКТИРОВАТЬ: Репозиторий для этого кода

7
задан j.i.h. 26 June 2012 в 18:57
поделиться