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

Comment obtenir le nombre de cœurs de processeur dans .NET/C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-18 19:51:10969parcourir

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

Récupération du nombre de cœurs de processeur à l'aide de .NET/C#

.NET/C# fournit plusieurs méthodes pour identifier le nombre de cœurs de processeur disponibles sur un système. Voici quelques approches :

1. Processeurs physiques :

Cette méthode compte le nombre de processeurs physiques installés.

<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. Cœurs par processeur :

Cette approche additionne le nombre de cœurs sur tous les processeurs.

<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. Processeurs logiques :

Cela accède directement au nombre total de processeurs logiques (y compris l'hyperthreading).

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

4. Processeurs (hors ceux masqués par Windows) :

Cette méthode prend en compte les processeurs qui pourraient être exclus des rapports Windows standard. Cela nécessite l'utilisation de l'API de configuration.

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

Considérations importantes :

  • System.Management.dll : Pensez à ajouter une référence à System.Management.dll dans votre projet.
  • Mises à jour du système : Des mises à jour complètes du système (correctifs et service packs) peuvent être nécessaires pour obtenir des résultats précis sur certains systèmes. La disponibilité d'informations détaillées sur le processeur dépend de la configuration et des mises à jour du système.

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