Maison >développement back-end >C++ >Comment puis-je récupérer le nombre de cœurs de processeur dans .NET/C# ?

Comment puis-je récupérer le nombre de cœurs de processeur dans .NET/C# ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-18 20:20:17392parcourir

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

Obtenir le nombre de cœurs de processeur dans .NET/C#

La détermination du nombre de cœurs de processeur disponibles pour votre application est essentielle pour optimiser les performances. Dans .NET/C#, il existe plusieurs façons d'extraire ces informations :

1. Environnement.ProcessorCount

Cette propriété fournit le nombre de processeurs logiques sur le système. Cependant, il ne fait pas de différence entre les processeurs physiques et les cœurs hyper-threadés.

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

2.Win32_Processor

En utilisant WMI (Windows Management Instrumentation), vous pouvez accéder à des informations plus détaillées sur le processeur :

Processeur physique :

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

Nombre de cœurs :

<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. Processeurs exclus

De plus, vous pouvez utiliser les appels d'API Windows pour découvrir les processeurs exclus dans Windows. Le code suivant affiche le nombre total de processeurs logiques, y compris les processeurs exclus :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn