2012-12-05 4 views
11

하드 디스크가 SSD (솔리드 스테이트 드라이브) 인 경우 C#을 확인해야하며, 검색 페널티가 필요하지 않습니까? 내가 사용 :하드 디스크에 파일을 쓰지 않고도 하드 디스크가 SSD인지 확인하는 가장 쉬운 방법은 C#입니다.

ManagementClass driveClass = new ManagementClass("Win32_DiskDrive"); 
    ManagementObjectCollection drives = driveClass.GetInstances(); 

을하지만 그것의 속성 만에 SSD를 포함하는 문자열을 제공, 그에 의존하지 수 있습니까?

직접 확인할 필요가 있습니까?

+0

SSD 드라이브의 하드웨어 식별자 목록을 유지 관리 할 수 ​​있습니다. 물론, 그것은 진화하는 목록입니다 ... – ppeterka

+2

+1 이길 때. 나는 이것을 사용하여 메모리 또는 디스크 기반 접근법 사이에서 어떻게 흘려 보일지 알 수있었습니다. 액세스 시간을 측정하는 데는 시간이 걸립니다. – Paparazzi

+0

하이브리드 드라이브는 잃어버린 원인이기도합니다. 내 새 노트북에서 C : 드라이브는 20GB SSD가있는 하드 디스크입니다. 이것은 해결되어야 할 문제가 아닙니다. –

답변

9

WMI는이를 쉽게 확인할 수 없습니다. (: 여기 Windows 7 Enhancements for Solid-State Drives, 페이지 8 : Windows 7 Disk Defragmenter User Interface Overview 여기 알고리즘에 대한) 다음 MSDN 블로그에서 Tell whether SSD or not in C#

인용 한 윈도우 7 디스크가 SSD인지 확인하는 데 사용하는 동일한 알고리즘을 기반으로 여기 해결책이 있습니다 :

디스크 조각 직접 DEVICE 명령 식별 ATA 통해 장치 쿼리의 결과를 보인다. 조각 모음은 IOCTL_ATA_PASS_THROUGH 요청하고 IDENTIFY_DEVICE_DATA 구조를 확인합니다. NomimalMediaRotationRate를 1로 설정하면이 디스크는 으로 간주됩니다. 최신 SSD는 설정 단어 217 (공칭 매체 을 1로보고하는 데 사용됩니다)로 명령에 응답합니다. 217이라는 단어는 2007 년에 ATA8-ACS 사양에 도입되었습니다.

+0

이 접근법의 문제점은 스토리지가 SSD인지 여부를 감지하지 못하지만 대기 시간이 낮고 처리량이 높은지 확인하는 것입니다. 그러므로 OP에 대한 나의 질문. :-) – CodeCaster

+2

@CodeCaster - 동의하지 않습니다. 그것은 SSD에 대해 1로 설정되어야하는 공칭 ATA 매체 회전 속도를 테스트 할 수 있습니다 ('비 회전 매체'). http://www.t13.org/documents/UploadedDocuments/docs2007/D1699r4a-ATA8-ACS를 참조하십시오.pdf 139 페이지를 참조하십시오. 일부 SSD 디스크/드라이버는 실제로이를 구현할 수 없습니다. –

+0

당신 말이 맞아요, 방금 코드를 건너 뛰고 놓쳤습니다. – CodeCaster

관련 문제