目前网上千篇一律都是这个代码
public static string Get_CPUID()
{
try
{
//需要在解决方案中引用System.Management.DLL文件
ManagementClass mc = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = mc.GetInstances();
string strCpuID = null;
foreach (ManagementObject mo in moc)
{
strCpuID = mo.Properties["ProcessorId"].Value.ToString();
mo.Dispose();
break;
}
return strCpuID;
}
catch
{
return "";
}
}
有的函数名不一样,核心都这个,但是你测试时间发现这个都要1.2秒以上特别慢,大部分时间都耗费在foreach (ManagementObject mo in moc)这行代码。其实有更快的方法,很可能这种方法内部遍历效率太慢导致。应该改成下面的方法
public static string GetCpuID()
{
string cpuInfo = "";//cpu序列号
try
{
var mbs = new ManagementObjectSearcher("Select ProcessorId From Win32_processor");
var moc = mbs.Get();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
break;
}
moc.Dispose();
mbs.Dispose();
return cpuInfo;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return cpuInfo;
}
}
private void button1_Click(object sender, EventArgs e)
{
Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine(GetCpuID());
sw.Stop();
Console.WriteLine("获取ID:" + sw.Elapsed.TotalSeconds);
}
}
这样大概只需要50毫秒左右。