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

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

Barbara Streisand
Barbara Streisand原創
2025-01-18 19:51:101012瀏覽

How to Get the Number of CPU Cores in .NET/C#?

使用 .NET/C# 擷取 CPU 核心計數

.NET/C# 提供了多種方法來識別系統上可用的 CPU 核心數量。 以下是一些方法:

1。實體處理器:

此方法計算安裝的實體處理器的數量。

<code class="language-csharp">foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_ComputerSystem").Get())
{
    Console.WriteLine($"Number of Physical Processors: {item["NumberOfProcessors"]}");
}</code>

2。每個處理器的核心數:

此方法對所有處理器的核心數量進行求和。

<code class="language-csharp">int totalCores = 0;
foreach (var item in new System.Management.ManagementObjectSearcher("Select * from Win32_Processor").Get())
{
    totalCores += int.Parse(item["NumberOfCores"].ToString());
}
Console.WriteLine($"Total Number of Cores: {totalCores}");</code>

3。邏輯處理器:

這直接存取邏輯處理器的總數(包括超執行緒)。

<code class="language-csharp">Console.WriteLine($"Number of Logical Processors: {Environment.ProcessorCount}");</code>

4。處理器(不含 Windows 隱藏的處理器):

此方法考慮了可能被排除在標準 Windows 報告之外的處理器。 它需要使用設定 API。

<code class="language-csharp">int processorCount = 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))
        {
            processorCount = deviceNumber;
            break;
        }
    }
}
finally
{
    if (deviceList != IntPtr.Zero) { SetupDiDestroyDeviceInfoList(deviceList); }
}
Console.WriteLine($"Number of Cores (including hidden): {processorCount}");</code>

重要注意事項:

  • System.Management.dll: 請記得在您的專案中加入對 System.Management.dll 的參考。
  • 系統更新:為了在某些系統上獲得準確的結果,可能需要完整的系統更新(修補程式和服務包)。 詳細處理器資訊的可用性取決於系統的配置和更新。

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

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