Любой способ определить скорость съемного диска в Windows?
Есть ли способ определить скорость съемного диска в Windows без фактического чтения в файл. И если мне нужно прочитать файл, сколько нужно прочитать, чтобы получить полу точную скорость (например, определить, является ли устройство USB2 или USB1)?
РЕДАКТИРОВАТЬ: просто чтобы уточнить, USB2 и USB1 были примером. Это может быть Compact Flash, SSD, съемный диск. И я пытаюсь определить это как можно быстрее, поскольку это реально влияет на отзывчивость приложения.
РЕДАКТИРОВАТЬ: Следует также уточнить, это должно быть сделано программно. Это, вероятно, будет сделано в C++.
РЕДАКТИРОВАТЬ: ускоренный ответ является своего рода тем, что я искал (хотя я не написал WMI на C++). Но мне нужно знать, какие свойства я должен проверить, чтобы определить относительную скорость. Мне не нужна точная скорость (как я уже говорил о разнице в скорости между USB1 и USB2), но мне нужно знать, будет ли она SLLOOOOWWW.
7 ответов
WMI - Physical Disks Properties - статья, которую я нашел, которая, по крайней мере, поможет вам выяснить, что вы подключили. Я предвижу, что к таблицам будут приравниваться скорости отдельных производителей и моделей, что не такое простое решение, как вы, возможно, надеялись.
У вас могут быть лучшие результаты, если вы запросите у операционной системы информацию об оборудовании, а не попытаетесь извлечь ее из информации о времени передачи данных.
Например, одинаковые скорости передачи не обязательно означают, что два устройства используют одну и ту же технологию, хотя другие факторы, такие как время поиска, могут повысить точность, если такая информация доступна для вашего приложения.
Чтобы приложение отвечало на запросы во время выполнения этой работы, попробуйте выполнять вызовы асинхронно и предоставить пользователю своего рода индикатор прогресса. В качестве примера рассмотрим, как WinDirStat обрабатывает эту индикацию прогресса (мне нравится анимация pac-man, когда анализируется каждый каталог).
Попробуйте TerraCopy и скопируйте один большой файл ~400- 500 МБ с устройства на устройство, и вы увидите скорость.
Я бы сказал, несколько мегабайт. Скорость передачи может начинаться медленно, а затем увеличиваться по мере ее передачи. Существуют также различия в размерах файлов (один файл размером 1 ГБ будет передаваться гораздо быстрее, чем файлы меньшего размера, 1 ГБ).
Лучший способ сделать это - скопировать файл на устройство и с него и указать, сколько времени занимает работа с вашим кодом. Скорость USB1 составляет 11 Мбит / с (я думаю), а USB2 - 480 Мбит / с (обратите внимание, что это цифры для всей шины, а не для каждого порта, поэтому несколько устройств на одной шине будут менять действительные числа).
В Windows вы можете определить, является ли подключенное USB-устройство USB2, выбрав "Вид" -> "Устройства по соединению" в диспетчере устройств, а затем проверив, находится ли устройство под контроллером USB2 (USB2 Enhanced Host Controller).
Обратите внимание, что это не означает, что ваше устройство на самом деле будет работать на более высоких скоростях, хотя для этого вам все равно потребуются реальные тесты пропускной способности. Программное обеспечение Sisoft Sandra для сравнительного анализа содержит список съемных жестких дисков, которые поддерживаются в его списке функций.
РЕДАКТИРОВАТЬ: Из-за разъяснений в исходном вопросе, я представил новый ответ.
Рассмотрим количество вещей, которые могут повлиять на скорость передачи данных:
- Скорость шины используется для подключения устройства к системе. Это вряд ли будет вашим ограничивающим фактором, если он не подключен через USB1.
- Для жестких дисков скорость вращения и время поиска имеют значение. Диски со скоростью 7200 об / мин будут считывать и записывать блоки данных быстрее, чем диски со скоростью 5400 об / мин.
- Оптические и магнитные накопители обычно вращаются, когда они не используются, поэтому первый доступ займет на несколько порядков больше, чем второй доступ.
- Файловая система, используемая на конкретном устройстве.
- Кэширование данных и метаданных файловой системы. Чем меньше метаданных кэшируется, тем больше магнитных или оптических дисков приходится искать, где находятся данные.
- Схема доступа к данным. Доступ к небольшому количеству больших смежных файлов почти всегда быстрее, чем доступ к большому количеству маленьких файлов, разбросанных по всему диску.
- Фрагментация файловой системы
Возможно, вам удастся выработать некоторую эвристику, основанную на различных характеристиках устройств, которые вы ожидаете увидеть, но в целом нет хорошего способа определить скорость передачи для конкретной комбинации шины, носителя, файловой системы и схемы доступа к данным без на самом деле измеряя это. Если вы решите измерить, постарайтесь максимально точно смоделировать ваш окончательный шаблон доступа.
Я собираюсь одолжить хрустальный шар Рэймонда Чена и сказать, что ты действительно не хочешь этого. Вы, вероятно, хотите использовать асинхронный ввод-вывод. Если вы не получите результат своего ввода-вывода в течение секунды, вы хотите проверить, сколько произошло. Возьмите обратное число, и у вас будет хорошая оценка, чтобы процитировать пользователя.
Если через секунду ничего не произошло, вас может ждать сюрприз. Но даже это может случиться. Например, жесткому диску может потребоваться секунда, чтобы раскрутиться. Просто опрашивайте каждую секунду, пока что-то не произошло.