2013-07-10 4 views
0

У меня есть программа, которая копирует большое количество файлов из нескольких каталогов в каталог. сумма не известна (около 50K), но все они находятся на одном диске. в программе должен быть индикатор выполнения. когда я написал программу в первый раз, я не написал индикатор выполнения, и программа работала медленно. i toke около 15-20 минут, чтобы передать файлы. чтобы написать индикатор выполнения, мне нужно знать, сколько файлов у меня есть, поэтому я просмотрел каталоги и перечислил файлы. теперь первый пробег файлов занимает около 5 минут, но копия занимает всего 5-7 минут.копия файла быстрее за один проход

может ли кто-нибудь объяснить явление? Мне очень жаль, что я не могу разделить код, но это простое использование File.Copy и простой C# .net 3.5 progressBar

ответ

4

Такой подход минимизирует наиболее дорогая операция на диске, перемещение головки считывателя. Скорость диска определяется двумя основными механическими ограничениями. Одним из них является то, как быстро вращается пластина, которая устанавливает верхнюю границу скорости передачи данных. Это исправлено. И как быстро читаемая головка может быть перемещена на другую дорожку. Типичное время поиска, толстая дюжина миллисекунд, чтобы переместить его на один трек. Очень много времени в циклах процессора. Что делает заказ, в котором вы очень часто обращаетесь к данным на диске. Постоянно перескакивая голова читателя назад и вперед между записями каталогов и кластерами файловых данных, как вы делали изначально, очень дорого.

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

Прочитав записи в каталоге, вы можете избежать многих попыток. Они локализованы в области диска, называемого MFT, физически близки друг к другу, так что меньше длинных поисков. Вы прочтете их снова, когда начнете копировать файлы, но на этот раз они поступают из кеша файловой системы. Сохраняется в ОЗУ при первом просмотре каталогов. Поэтому нет необходимости в дорогостоящем обращении к MFT.

Кроме того, причина, по которой SSD работают намного лучше, чем механические приводы, они имеют очень низкое время поиска.

+0

определенно лучший ответ, который я мог бы попросить. –

Смежные вопросы