Параллельная библиотека задач для обхода каталогов

Я бы хотел пройти по каталогу на моем жестком диске и поискать во всех файлах определенную строку поиска. Это звучит как идеальный кандидат на то, что может (или должно) выполняться параллельно, поскольку ввод-вывод выполняется довольно медленно.

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

foreach (string directory in directories) { ... }

на

Parallel.ForEach(directories, (directory) => { ... }) 

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

Кто-нибудь успешно делал что-то подобное раньше? Что вы посоветуете по этому поводу?

6
задан rein 10 November 2010 в 22:48
поделиться