Я пытаюсь рассчитать размеры каталога таким образом, чтобы делить нагрузку, чтобы пользователь мог видеть прогресс подсчета. Я думал, что логичным способом сделать это было бы сначала создать дерево каталогов, а затем выполнить операцию, подсчитывая длину всех файлов.Вычисление размеров каталога
Вещь, которая приходит ко мне как неожиданная, заключается в том, что основная часть времени (дисковый ввод-вывод) происходит от создания дерева каталогов, а затем переключение на FileInfo[]
происходит почти мгновенно, практически без дискового ввода-вывода.
Я попытался с Directory.GetDirectories()
, просто создав дерево строк имен каталогов и используя объект DirectoryInfo
, и оба метода по-прежнему занимают основную часть времени ввода-вывода (считывая MFT, конечно) по сравнению перебирать все файлы FileInfo.Length
для файлов в каждом каталоге.
Я думаю, что нет возможности уменьшить ввод-вывод, чтобы значительно увеличить дерево, я думаю, мне просто интересно, почему эта операция занимает значительно больше времени по сравнению с более многочисленными файлами?
Кроме того, если кто-то может рекомендовать нерекурсивный способ подсчета очков (так как мне кажется, что мне нужно просто разбить перечисление и сбалансировать его, чтобы сделать размер с учетом более отзывчивого). Создание потока для каждой поддиректории с базы и позволяя сбалансировать баланс планировщика, вероятно, будет не очень хорошим, не так ли?
EDIT: Repository for this code
Я также боролся с вычислением размера каталога. Я сделал именно то, что вы сделали. Tried> fileInfo [], а затем> Directory.GetDirectories(). Но я все еще не знаю лучшего способа. –
Вы говорите, что вызов GetDirectories() занимает много времени? Я этого не видел, но опять же, я никогда не делал этого с большим количеством каталогов. Кроме того, почему вас это волнует, если он рекурсивный? Это рекурсивная задача, и вы никогда не будете иметь так много вложенных каталогов, что вы взорвите стек. –
обратитесь к http://stackoverflow.com/questions/468119/whats-the-best-way-to-calculate-the-size-of-a-directory-in-net –