Par défaut PerfMon extrait les données chaque seconde. Afin d'obtenir une image permanente dans le graphique du moniteur de performance Windows, j'ai écrit un compteur personnalisé pour mesurer le taux de comptage par minute. Après avoir travaillé pendant une minute, je reçois des données de mon compteur. Notez que la précision n'a pas d'importance pour moi.
Extrait de code ressembler à ceci:
class PerMinExample
{
private static PerformanceCounter _pcPerSec;
private static PerformanceCounter _pcPerMin;
private static Timer _timer = new Timer(CallBack, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1));
private static Queue<CounterSample> _queue = new Queue<CounterSample>();
static PerMinExample()
{
// RateOfCountsPerSecond32
_pcPerSec = new PerformanceCounter("Category", "ORDERS PER SECOND", false);
// NumberOfItems32
_pcPerMin = new PerformanceCounter("Category", "ORDERS PER MINUTE", false);
_pcPerSec.RawValue = 0;
_pcPerMin.RawValue = 0;
}
public void CountSomething()
{
_pcPerSec.Increment();
}
private static void CallBack(Object o)
{
CounterSample sample = _pcPerSec.NextSample();
_queue.Enqueue(sample);
if (_queue.Count <= 60)
return;
CounterSample prev = _queue.Dequeue();
Single numerator = (Single)sample.RawValue - (Single)prev.RawValue;
Single denomenator =
(Single)(sample.TimeStamp - prev.TimeStamp)
/(Single)(sample.SystemFrequency)/60;
Single counterValue = numerator/denomenator;
_pcPerMin.RawValue = (Int32)Math.Ceiling(counterValue);
Console.WriteLine("ORDERS PER SEC: {0}", _pcPerSec.NextValue());
Console.WriteLine("ORDERS PER MINUTE: {0}", _pcPerMin.NextValue());
}
}
Actuellement, nous utilisons le type CounterDelta32 pour le compteur et le PerfMon les données et contrôlant toutes les minutes. Cette approche semble fonctionner correctement pour nous. –