C# 如何获取执行线程的核心/处理器id?
例如,我的笔记本电脑有两个内核和四个逻辑处理器的英特尔。 当我使用代码打印关于执行线程的信息时,我希望 打印执行线程的内核或逻辑处理器的id。如何在C中实现它# 这不是一个如何获取静态信息的问题,而是一个执行线程的动态信息的问题。例如,这就是我用来获取静态信息的方法C# 如何获取执行线程的核心/处理器id?,c#,C#,例如,我的笔记本电脑有两个内核和四个逻辑处理器的英特尔。 当我使用代码打印关于执行线程的信息时,我希望 打印执行线程的内核或逻辑处理器的id。如何在C中实现它# 这不是一个如何获取静态信息的问题,而是一个执行线程的动态信息的问题。例如,这就是我用来获取静态信息的方法 ManagementClass mc = new ManagementClass("win32_processor"); ManagementObjectCollection mColl = mc.GetInstances();
ManagementClass mc = new ManagementClass("win32_processor");
ManagementObjectCollection mColl = mc.GetInstances();
foreach (ManagementObject mObj in mColl)
{
PropertyDataCollection pDC = mObj.Properties;
foreach (PropertyData pd in pDC)
Console.WriteLine(" {0} - {1}", pd.Name, pd.Value);
}
//部分输出
Caption - Intel64 Family 6 Model 78 Stepping 3
Description - Intel64 Family 6 Model 78 Stepping 3
DeviceID - CPU0
Name - Intel(R) Core(TM) i3 - 6006U CPU @ 2.00GHz
NumberOfCores - 2
NumberOfEnabledCore - 2
NumberOfLogicalProcessors - 4
SocketDesignation - U3E1
ThreadCount - 4 // probably threads of hyper-threading, not process threads
您可以使用GetCurrentProcessorNumber
[DllImport("Kernel32.dll"), SuppressUnmanagedCodeSecurity]
public static extern int GetCurrentProcessorNumber();
static void Main(string[] args)
{
Parallel.For (0, 10 , state => Console.WriteLine("Thread Id = {0}, CoreId = {1}",
Thread.CurrentThread.ManagedThreadId,
GetCurrentProcessorNumber()));
Console.ReadKey();
}
如果您编写的是具有2核4线程的英特尔处理器,则更有意义。除非您专门设置关联,否则可能会移动重复的线程。它位于ProcessInfo结构中。请参阅Pinvoke:也请参阅msdn:然后使用WMI获取有关核心链接的详细信息:似乎对我有用。注:
使用系统安全代码>和使用System.Runtime.InteropServices代码>(和使用System.Threading;
)