2012-12-05 13 views
11

Ho bisogno di verificare in C# se un disco rigido è SSD (unità a stato solido), nessuna penalità di ricerca? ho usato:Qual è il modo più semplice in C# per verificare se il disco rigido è SSD senza scrivere alcun file sul disco rigido?

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

Ma la sua dà solo stringhe che contengono SSD nelle proprietà, non posso dipendere da quello?

Ho bisogno di un modo diretto per verificare che?

+0

È possibile mantenere un elenco di identificativi hardware delle unità SSD e verificarlo. Certo, questa è una lista in continua evoluzione ... – ppeterka

+2

+1 per essere picchiato. Ho potuto vedere come si potrebbe usare questo per flop tra un approccio basato su memoria o su disco. Ci vuole tempo per misurare il tempo di accesso. – Paparazzi

+0

Le unità ibride sono una causa persa. Ne ho uno nel mio nuovo portatile, l'unità C: è un disco rigido con un SSD da 20 GB. Questo non è un problema che deve essere risolto. –

risposta

9

WMI non sarà in grado di determinare facilmente questo. C'è una soluzione qui che si basa sullo stesso algoritmo di Windows 7 utilizza per determinare se un disco è SSD (più l'algoritmo qui: Windows 7 Enhancements for Solid-State Drives, pagina 8 e anche qui: Windows 7 Disk Defragmenter User Interface Overview): Tell whether SSD or not in C#

Una citazione dal blog MSDN :

Utilità di deframmentazione dischi esamina il risultato di interrogare direttamente il dispositivo attraverso l'ATA comando DEVICE identificare. Problemi di deframmentazione IOCTL_ATA_PASS_THROUGH richiesta e verifica la struttura IDENTIFY_DEVICE_DATA . Se NomimalMediaRotationRate è impostato su 1, questo disco è considerato un SSD. Gli ultimi SSD risponderanno al comando tramite la parola di impostazione 217 (che viene utilizzata per riportare il tasso di rotazione nominale del media a 1). La parola 217 è stata introdotta nel 2007 nella specifica ATA8-ACS .

+0

Il problema con questo approccio è che non rileverà se una memoria è un SSD, ma basta controllare se ha bassa latenza e throughput elevato. Quindi la mia domanda a OP. :-) – CodeCaster

+2

@CodeCaster - Non sono d'accordo. È in grado di testare la velocità di rotazione dei supporti ATA nominale che dovrebbe essere impostata su 1 ('media non rotante') per SSD. Vedi http://www.t13.org/documents/UploadedDocuments/docs2007/D1699r4a-ATA8-ACS.pdf pagina 139, anche se alcuni dischi/driver SSD potrebbero effettivamente non implementarlo. –

+0

Hai ragione, ho appena sfogliato il codice e l'ho perso. – CodeCaster

Problemi correlati