如果硬盘是 SSD(固态驱动器),我需要检查 C#,没有寻道惩罚?我用了:
ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection drives = driveClass.GetInstances();
但它只给出属性中包含 SSD 的字符串,我不能依赖它吗?
我需要直接的方法来检查吗?
如果硬盘是 SSD(固态驱动器),我需要检查 C#,没有寻道惩罚?我用了:
ManagementClass driveClass = new ManagementClass("Win32_DiskDrive");
ManagementObjectCollection drives = driveClass.GetInstances();
但它只给出属性中包含 SSD 的字符串,我不能依赖它吗?
我需要直接的方法来检查吗?
WMI 将无法轻松确定这一点。这里有一个解决方案,它基于 Windows 7 用来确定磁盘是否为 SSD 的相同算法(更多关于算法的信息:Windows 7 Enhancements for Solid-State Drives,第 8 页和此处:Windows 7 磁盘碎片整理程序用户界面概述):在 C# 中判断是否为 SSD
引用 MSDN 博客的一段话:
Disk Defragmenter 查看通过 ATA IDENTIFY DEVICE 命令直接查询设备的结果。碎片整理程序发出 IOCTL_ATA_PASS_THROUGH 请求并检查 IDENTIFY_DEVICE_DATA 结构。如果 NomimalMediaRotationRate 设置为 1,则此磁盘被视为 SSD。最新的 SSD 将通过设置字 217(用于将标称介质旋转速率报告为 1)来响应该命令。217 这个词是 2007 年在 ATA8-ACS 规范中引入的。
这将为您提供 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字符串类型是最后一个驱动器,改为数组获取所有驱动器