Monitorare la cpu con i performance counter

Avevo la necessità di monitorare la cpu di un pc che ogni tanto schizzava al 100%.

Ho fatto una ricerca veloce in internet ma non ho trovato niente di facilmente utilizzabile (se avete suggerimenti li accetto volentieri).

Ricordando dalla certificazione del framework che c’era la possibilità di leggere i PerformanceCounter ho scritto una piccola classe che fa al caso mio.

public class ProcessorTimeMonitor
{
    public delegate void AlertEventHandler(object sender, EventArgs e);
    public event AlertEventHandler OnAlert;
    public delegate void DetectEventHandler(object sender, DetectEventArgs e);
    public event DetectEventHandler OnDetect;

    private System.Timers.Timer timer = null;
    private PerformanceCounter pc;

    private int occurrences = 0;
    private float processorTimeLimit;
    private int occurrencesLimit;

    public ProcessorTimeMonitor(float processorTimeLimit, int occurrencesLimit)
    {
        this.processorTimeLimit = processorTimeLimit;
        this.occurrencesLimit = occurrencesLimit;

        pc = new PerformanceCounter("Processor", "% Processor Time", "_Total");

        timer = new System.Timers.Timer(1000);
        timer.Elapsed += new System.Timers.ElapsedEventHandler(Detection);
    }

    private void Detection(object sender, System.Timers.ElapsedEventArgs e)
    {
        float value = pc.NextValue();

        if (OnDetect != null)
            OnDetect(this, new DetectEventArgs(value));

        if (value >= processorTimeLimit)
            occurrences++;
        else
            occurrences = 0;

        if (occurrences > occurrencesLimit)
        {
            occurrences = 0;

            if (OnAlert != null)
                OnAlert(this, new EventArgs());
        }
    }

    public void Start()
    {
        timer.Start();
    }

    public void Stop()
    {
        timer.Stop();
    }

    public class DetectEventArgs : EventArgs
    {
        public DetectEventArgs(float value)
        {
            this.Value = value;
        }

        public float Value { get; set; }
    }
}
Tag di Technorati: ,

posted @ giovedì 31 marzo 2011 15:12

Print
Comments have been closed on this topic.
«aprile»
domlunmarmergiovensab
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011