Как ускорить процесс перебора файлов

262
08 декабря 2016, 22:43
try
{
List<string> Picture = new List<string>();
            List<string> PaThS = new List<string>();
            string[] SVF =  {
        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),  
        Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)
                            };
            foreach (var paths in SVF)
                PaThS.AddRange(Directory.GetDirectories(paths));
            foreach (var e in PaThS)
                    Picture.AddRange(Directory.GetFiles(e, "*.jpg", SearchOption.AllDirectories));
}
catch{}
}     

Здесь перебирает слишком долго, пишу на 3.5 фрейморке, на 4 хорошо идёт EnumerateDirectories и EnumerateFiles, А мне нужно на 3.5 фреймворке. GetFiles слишком долго перебирает всё, Как можно ускорить процесс? P.S: Вообще желательно без Linq))

P.P.S: Пишу в Консольке!

Answer 1

Я думаю, что нельзя значительно ускорить перебор файлов.

Если файлы находятся на одном диске и сделать многопоточность, то упретесь в производительность ЖД.

Если бы вы использовали EnumerateDirectories и EnumerateFiles, то в вашем бы случае это бы не дало особого результата, так как судя по коду вам нужен итог и между составлением списка вы ничего не обрабатываете. Т.е в любом случае вы бы ждали.

Можно заменить List<String>, на StringCollection, этот тип быстрее работает со строками.

Можно воспользоваться WinApi, как написали в комментариях, НО чудес не бывает и не стоит ждать огроменной прибавки к скорости.

Answer 2

Как можно ускорить процесс?

Про ускорение перебора файлов есть в другом вопросе.

на 4 хорошо идёт EnumerateDirectories и EnumerateFiles

Разница между Enumerate* и Get* в том, что первые возвращают файлы поштучно, а вторые собирают в массив. Из того, что enumerate тебя устраивали, могу сделать вывод, что на самом деле тебе нужно не ускорение, а просто чтобы UI не зависал на время поиска. В таком случае правильным решением будет вынести поиск файлов в отдельный поток.

READ ALSO
Экспорт модели в .xlsx соблюдая SOLID

Экспорт модели в .xlsx соблюдая SOLID

В БД есть таблица результатов тестирования по русскому языку и математике (SubjectCode=2):

174
Замена тега со ссылкой на ссылку

Замена тега со ссылкой на ссылку

мне в PHP нужно заменить строку

567