GetFiles / GetDirectories и EnumerateDirectories / EnumerateFiles Снижение производительности в UNC / виртуальном каталоге - PullRequest
1 голос
/ 13 марта 2012

У меня есть файловый сервер, который сопоставлен с буквой сетевого диска W. Он имеет 732 основных папки и подпапки и много файлов.Я сопоставил виртуальный каталог с этим диском и назвал его «Documents».

Теперь я хочу проверить, сколько времени требуется, чтобы найти только те папки, в которых содержится «final».я создал консольное приложение, а не веб-приложение, и написал ниже код, который дал мне очень медленные результаты, что нежелательно.Пожалуйста, найдите ниже код

DateTime startdatetime = DateTime.Now;
var dirs = from dir in
Directory.EnumerateDirectories("W:\\", "*Final*", SearchOption.AllDirectories)
select dir;
foreach (var dir in dirs)
{
    Console.WriteLine(dir);
}
DateTime EndDate = DateTime.Now;
TimeSpan t = EndDate - startdatetime;
Console.WriteLine(t.Minutes);
Console.ReadLine();

Это дало мне только папки, а не имена файлов за 5 минут при первом запуске и 6 минут во втором.Старый код, который я использовал для получения только папок, был

DateTime startdatetime = DateTime.Now;
string[] dirs = 
    Directory.GetDirectories("W:\\", "*Final*", SearchOption.AllDirectories);
foreach (var dir in dirs)
{
    Console.WriteLine(dir);
}
DateTime EndDate = DateTime.Now;
TimeSpan t = EndDate - startdatetime;
Console.WriteLine(t.Minutes);
Console.ReadLine();

Приведенный выше код дал мне список папок за 6-7 минут.Приведенный выше код для объединенных файлов и папок дал результаты за 12 минут.Это огромное снижение производительности в сети.

Любая идея, ребята, как уменьшить этот штраф?Я застрял здесь.

Ответы [ 2 ]

1 голос
/ 05 июня 2013

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

1 голос
/ 13 марта 2012

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

Единственное, о чем я могу подумать, это использовать Parallel для каждого цикла, а не обычный, чтобы вы могли использовать свои процессоры. Но это снизит стоимость, но не радикально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...