Любой способ определить скорость съемного диска в Windows? - PullRequest
4 голосов
/ 08 октября 2008

Есть ли способ определить скорость съемного диска в Windows без фактического чтения в файле. И если мне нужно прочитать файл, сколько нужно прочитать, чтобы получить полуточную скорость (например, определить, является ли устройство USB2 или USB1)?

РЕДАКТИРОВАТЬ : Просто уточнить, USB2 и USB1 были примером. Это может быть Compact Flash, SSD, съемный диск. И я пытаюсь определить это как можно быстрее, поскольку это реально влияет на отзывчивость приложения.

РЕДАКТИРОВАТЬ : Следует также уточнить, это должно быть сделано программно. Это, вероятно, будет сделано в C ++.

РЕДАКТИРОВАТЬ : ускоренный ответ - это то, что я искал (хотя я не написал WMI на C ++). Но мне нужно знать, какие свойства я должен проверить, чтобы определить относительную скорость. Мне не нужна точная скорость (как я уже говорил о разнице в скорости между USB1 и USB2), но мне нужно знать, будет ли она SLLOOOOWWW.

Ответы [ 7 ]

2 голосов
/ 09 октября 2008

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

2 голосов
/ 08 октября 2008

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

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

Чтобы приложение реагировало во время выполнения этой работы, попробуйте выполнять вызовы асинхронно и предоставить пользователю своего рода индикатор прогресса. В качестве примера рассмотрим, как WinDirStat обрабатывает этот индикатор прогресса (мне нравится анимация pac-man, когда анализируется каждый каталог).

0 голосов
/ 10 октября 2008

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

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

0 голосов
/ 08 октября 2008

Рассмотрим количество вещей, которые могут повлиять на скорость передачи данных:

  • Скорость шины, используемой для подключения устройства к системе. Это вряд ли будет вашим ограничивающим фактором, если он не подключен через USB1.
  • Для жестких дисков скорость вращения и время поиска имеют значение. Диски со скоростью 7200 об / мин будут считывать и записывать блоки данных быстрее, чем диски со скоростью 5400 об / мин.
  • Оптические и магнитные накопители обычно вращаются, когда они не используются, поэтому первый доступ займет на несколько порядков больше, чем второй доступ.
  • Файловая система, используемая на конкретном устройстве.
  • Кэширование данных и метаданных файловой системы. Чем меньше метаданных кэшируется, тем больше магнитных или оптических дисков приходится искать, где находятся данные.
  • Схема доступа к данным. Доступ к небольшому количеству больших смежных файлов почти всегда быстрее, чем к большому количеству маленьких файлов, разбросанных по всему диску.
  • Фрагментация файловой системы

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

0 голосов
/ 08 октября 2008

Попробуйте TerraCopy и скопируйте один большой файл ~ 400 Мб - 500 Мб с устройства на устройство, и вы увидите скорость.

0 голосов
/ 08 октября 2008

В Windows вы можете определить, является ли подключенное USB-устройство USB2, выбрав «Просмотр» -> «Устройства по соединению» в диспетчере устройств, а затем проверив, находится ли устройство под контроллером USB2 (USB2 Enhanced Host Controller).

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

РЕДАКТИРОВАТЬ: Из-за разъяснений в исходном вопросе, я представил новый ответ.

0 голосов
/ 08 октября 2008

Несколько мегабайт, я бы сказал. Скорость передачи может начинаться медленно, а затем увеличиваться по мере ее передачи. Существуют также различия в размерах файлов (один файл размером 1 ГБ будет передаваться гораздо быстрее, чем файлы меньшего размера, 1 ГБ).

Лучший способ сделать это - скопировать файл на устройство и с него и указать время, необходимое для обработки кода. Скорость USB1 составляет 11 Мбит / с (я думаю), а USB2 - 480 Мбит / с (обратите внимание, что это цифры для всей шины, а не для каждого порта, поэтому несколько устройств на одной шине будут менять действительные числа).

...