17

ハードディスクがSSD(ソリッドステートドライブ)であるかどうかをC#でチェックインする必要がありますが、シークペナルティはありませんか?私が使用した:

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

しかし、それはプロパティにSSDを含む文字列を与えるだけです、私はそれに依存することはできませんか?

それを直接確認する方法が必要ですか?

4

2 に答える 2

11

WMIはこれを簡単に判断できません。ここには、Windows 7がディスクがSSDであるかどうかを判断するために使用するのと同じアルゴリズムに基づくソリューションがあります(アルゴリズムの詳細:ソリッドステートドライブ用のWindows 7の機能強化、 8ページおよびここ:Windows7ディスクデフラグツールの概要):C#でSSDかどうかを確認します

MSDNブログからの引用:

ディスクデフラグツールは、ATAIDENTIFYDEVICEコマンドを使用してデバイスに直接クエリを実行した結果を確認します。デフラグツールはIOCTL_ATA_PASS_THROUGH要求を発行し、IDENTIFY_DEVICE_DATA構造をチェックします。NomimalMediaRotationRateが1に設定されている場合、このディスクはSSDと見なされます。最新のSSDは、ワード217(公称メディア回転速度を1に報告するために使用されます)を設定することによってコマンドに応答します。単語217は、ATA8-ACS仕様で2007年に導入されました。

于 2012-12-05T16:21:42.137 に答える
6

これにより、Win10で結果が得られます

ManagementScope scope = new ManagementScope(@"\\.\root\microsoft\windows\storage");
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM MSFT_PhysicalDisk");
string type = "";
scope.Connect();
searcher.Scope = scope;

foreach (ManagementObject queryObj in searcher.Get())
{       
    switch (Convert.ToInt16(queryObj["MediaType"]))
    {
        case 1:
            type = "Unspecified";
            break;

        case 3:
            type = "HDD";
            break;

        case 4:
            type = "SSD";
            break;

        case 5:
            type = "SCM";
            break;

        default:
            type = "Unspecified";
            break;
    }
}
searcher.Dispose();

Ps文字列タイプは最後のドライブです。すべてのドライブで取得するにはアレイに変更してください

于 2020-03-20T08:07:57.370 に答える