90 votes

Comment obtenir l'utilisation du CPU en C# ?

Je veux obtenir l'utilisation totale du CPU pour une application en C#. J'ai trouvé de nombreuses façons de fouiller dans les propriétés des processus, mais je ne veux que l'utilisation du CPU des processus, et le CPU total comme vous obtenez dans le TaskManager.

Comment je fais ça ?

107voto

CMS Points 315406

Vous pouvez utiliser le Compteur de performance classe de System.Diagnostics :

PerformanceCounter cpuCounter;
PerformanceCounter ramCounter;

cpuCounter = new PerformanceCounter();

cpuCounter.CategoryName = "Processor";
cpuCounter.CounterName = "% Processor Time";
cpuCounter.InstanceName = "_Total";

ramCounter = new PerformanceCounter("Memory", "Available MBytes");

public string getCurrentCpuUsage(){
            return cpuCounter.NextValue()+"%";
}

public string getAvailableRAM(){
            return ramCounter.NextValue()+"MB";
}

21voto

Khalid Rahaman Points 865

C'est un peu plus que ce qui était demandé, mais j'utilise le code supplémentaire du minuteur pour suivre et alerter si l'utilisation du CPU est de 90% ou plus pendant une période soutenue d'une minute ou plus.

public class Form1
{

    int totalHits = 0;

    public object getCPUCounter()
    {

        PerformanceCounter cpuCounter = new PerformanceCounter();
        cpuCounter.CategoryName = "Processor";
        cpuCounter.CounterName = "% Processor Time";
        cpuCounter.InstanceName = "_Total";

                     // will always start at 0
        dynamic firstValue = cpuCounter.NextValue();
        System.Threading.Thread.Sleep(1000);
                    // now matches task manager reading
        dynamic secondValue = cpuCounter.NextValue();

        return secondValue;

    }

    private void Timer1_Tick(Object sender, EventArgs e)
    {
        int cpuPercent = getCPUCounter();
        if (cpuPercent >= 90) {
            totalHits = totalHits + 1;
            if (totalHits == 60)
                Interaction.MsgBox("ALERT 90% usage for 1 minute");
            totalHits = 0;

        } else {
            totalHits = 0;
        }

        Label1.Text = cpuPercent + " % CPU";
        Label2.Text = getRAMCounter() + " RAM Free";
        Label3.Text = totalHits + " seconds over 20% usage";

    }
}

9voto

xoxo Points 314

C'est bon, je l'ai eu ! Merci pour votre aide !

Voici le code pour le faire :

private void button1_Click(object sender, EventArgs e)
{
    selectedServer = "JS000943";
    listBox1.Items.Add(GetProcessorIdleTime(selectedServer).ToString());
}

private static int GetProcessorIdleTime(string selectedServer)
{
    try
    {
        var searcher =
           ManagementObjectSearcher
             (@"\\"+ selectedServer +@"\root\CIMV2",
              "SELECT * FROM Win32_PerfFormattedData_PerfOS_Processor WHERE Name=\"_Total\"");

        ManagementObjectCollection collection = searcher.Get();
        ManagementObject queryObj = collection.Cast<ManagementObject>().First();

        return Convert.ToInt32(queryObj["PercentIdleTime"]);
    }
    catch (ManagementException e)
    {
        MessageBox.Show("An error occurred while querying for WMI data: " + e.Message);
    }
    return -1;
}

8voto

adparadox Points 85

Vous pouvez utiliser WMI pour obtenir des informations sur le pourcentage du CPU. Vous pouvez même vous connecter à un ordinateur distant si vous disposez des autorisations nécessaires. Regardez http://www.csharphelp.com/archives2/archive334.html pour avoir une idée de ce que vous pouvez accomplir.

Vous pouvez également consulter la référence MSDN pour l'option Win32_Process espace de noms.

Voir aussi un exemple CodeProject Comment faire : (presque) tout en WMI via C# .

5voto

Tarks Points 1816

Le CMS a raison, mais si vous utilisez l'explorateur de serveur dans Visual Studio et que vous jouez avec l'onglet compteur de performance, vous pouvez trouver comment obtenir de nombreuses mesures utiles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X