Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mendapatkan Kiraan Teras CPU dalam .NET/C#?

Bagaimanakah Saya Boleh Mendapatkan Kiraan Teras CPU dalam .NET/C#?

Susan Sarandon
Susan Sarandonasal
2025-01-18 20:20:17397semak imbas

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

Dapatkan bilangan teras CPU dalam .NET/C#

Menentukan bilangan teras CPU yang tersedia untuk aplikasi anda adalah penting untuk mengoptimumkan prestasi. Dalam .NET/C#, terdapat pelbagai cara untuk mengekstrak maklumat ini:

1. Environment.ProcessorCount

Harta ini menyediakan bilangan pemproses logik pada sistem. Walau bagaimanapun, ia tidak membezakan antara pemproses fizikal dan teras hyper-threaded.

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

2. Win32_Processor

Menggunakan WMI (Windows Management Instrumentation) anda boleh mengakses maklumat yang lebih terperinci tentang pemproses:

Pemproses Fizikal:

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

Bilangan teras:

<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. Pemproses yang dikecualikan

Selain itu, anda boleh menggunakan panggilan API Windows untuk menemui pemproses yang dikecualikan dalam Windows. Kod berikut memaparkan jumlah bilangan pemproses logik, termasuk pemproses yang dikecualikan:

<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>

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Kiraan Teras CPU dalam .NET/C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn