Где стоимость в этом коде? Профилирование действительно поможет на плохой машине
Я бы предположил, что стоимость этих вызовов DriveInfo где-то есть - глядя в рефлектор на код позади DriveInfo:
.cctor кажется довольно безобидным - просто проверяет буквенные ограничения.
.GetDriveType вызывает прямо в эквивалентный Win32 API. Подозреваю, что это попытается получить доступ к корню каталога, так как один из возможных результатов возврата - DRIVE_NO_ROOT_DIR.
http://msdn.microsoft.com/en-us/library/aa364939.aspx
.IsReady - при попытке «открыть» корневой каталог диска заполняется структура FILE_ATTRIBUTE. Опять же, это похоже на GetDriveType - возможно, дорого.
Оба последних API имеют возможность попробовать коснуться файловой системы диска. С этого момента вы зависите от поведения устройства и его драйверов для тома относительно того, что означает «размонтирован», «готов», «не готов» и т. Д., Например, попытка раскрутить диск.
Поскольку задержки составляют порядка секунд, я в равной степени подозреваю, что перечисление медленных томов дискет / DVD / CD занимает больше всего времени по сравнению с другими типами носителей. У дискет особенно долгое время был тайм-аут.