Итак, я делаю простое сканирование, чтобы получить список всех папок на жестком диске (c: \ windows и c: \ windows \ system32 считаются отдельными записями). Если бы я хотел предоставить индикатор выполнения для этой 1-2-минутной задачи, как бы я это сделал? То есть я знаю, как сделать прогрессбар, но не уверен, как определить, сколько работы для него сделано.
Редактировать: обратите внимание, что предварительное сканирование НЕ является решением, так как это сканирование только получает список папок, а предварительное сканирование займет столько же времени.
Пример кода ниже. Чистый запуск в моей системе занимает менее 2 минут, а второй раз - менее 10 секунд из-за кэширования доступа к диску. Я создал варианты, основанные на стеке, а не на рекурсии.
Один механизм, который я обнаружил, который, вероятно, не на 100% надежен, но намного быстрее, чем мое сканирование, заключается в передаче «dir / s / ab / b» в мою программу и подсчете случаев новой строки. Dir совершает какое-то волшебство, которое намного лучше сканирует мой HD, чем моя программа, но я не знаю, что это за волшебство.
class Program
{
static void recurse(string pos)
{
DirectoryInfo f = new DirectoryInfo(pos);
try
{
foreach (DirectoryInfo x in f.GetDirectories("*"))
{
recurse(x.FullName);
}
} catch (Exception) {}
}
static void Main(string[] args)
{
recurse("c:\\");
}
}