首頁 >後端開發 >C++ >如何在 .NET/C# 中檢索 CPU 核心計數?

如何在 .NET/C# 中檢索 CPU 核心計數?

Susan Sarandon
Susan Sarandon原創
2025-01-18 20:20:17442瀏覽

How Can I Retrieve the CPU Core Count in .NET/C#?

在.NET/C#中取得CPU核心數

確定應用程式可用的CPU核心數對於最佳化效能至關重要。在.NET/C#中,有多種方法可以提取此資訊:

1. Environment.ProcessorCount

此屬性提供系統上邏輯處理器的數量。但是,它不區分物理處理器和超線程核心。

<code class="language-C#">Console.WriteLine("逻辑处理器数量: {0}", Environment.ProcessorCount);</code>

2. Win32_Processor

使用WMI(Windows管理規範),您可以存取有關處理器的更多詳細資訊:

實體處理器:

<code class="language-C#">foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get())
{
    Console.WriteLine("物理处理器数量: {0}", item["NumberOfProcessors"]);
}</code>

核心數:

<code class="language-C#">int coreCount = 0;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
{
    coreCount += int.Parse(item["NumberOfCores"].ToString());
}
Console.WriteLine("核心数量: {0}", coreCount);</code>

3. 排除的處理器

此外,您可以使用Windows API呼叫來發現Windows中排除的處理器。以下程式碼顯示邏輯處理器的總數,包括被排除的處理器:

<code class="language-C#">int deviceCount = 0;
IntPtr deviceList = IntPtr.Zero;
Guid processorGuid = new Guid("{50127dc3-0f36-415e-a6cc-4cb3be910b65}");

try
{
    deviceList = SetupDiGetClassDevs(ref processorGuid, "ACPI", IntPtr.Zero, (int)DIGCF.PRESENT);
    for (int deviceNumber = 0; ; deviceNumber++)
    {
        SP_DEVINFO_DATA deviceInfo = new SP_DEVINFO_DATA();
        deviceInfo.cbSize = Marshal.SizeOf(deviceInfo);
        if (!SetupDiEnumDeviceInfo(deviceList, deviceNumber, ref deviceInfo))
        {
            deviceCount = deviceNumber;
            break;
        }
    }
}
finally
{
    if (deviceList != IntPtr.Zero) { SetupDiDestroyDeviceInfoList(deviceList); }
}
Console.WriteLine("核心数量: {0}", deviceCount);</code>

以上是如何在 .NET/C# 中檢索 CPU 核心計數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn