PerformanceCounter zu langsam

09/02/2009 - 09:12 von Wolfgang Schmidt | Report spam
Hallo,

Ich habe folgendes Problem: wenn ich PerformanceCounter auslese dauert
dies extrem lange.

Ich lasse alle Instanzen eines PRogrammes überwachen (Beispiel sagen
wir 100 mal eine geöffnete Calculator-Anwendung)

Dann gehe ich über die Liste angelegter Performancecounter und lasse
mir jeweils das NextValue ausgeben.

float value =performanceCounterList[i].NextValue();



Viele Grüße
Wolfgang
 

Lesen sie die antworten

#1 Frank Dzaebel
09/02/2009 - 11:33 | Warnen spam
Hallo Wolfgang,

Ich habe folgendes Problem: wenn ich PerformanceCounter
auslese dauert dies extrem lange.



Welchen Counter hast Du denn genommen
(mit welchen geànderten Eigenschaften) ?
Sollte im Normalfall bei 1 CPU etwa bei 1-3
Millisekunden pro NextValue liegen.
Ggf. hast Du es ja ungünstig implementiert.
Ein Implementations-Beispiel:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Diagnostics;
using System.Threading;

namespace PerfCount
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

bool abbruch = false;
Thread thread;
Dictionary<long, float> werte = new Dictionary<long, float>();
Stopwatch sw = new Stopwatch();

private void btnStart_Click(object sender, EventArgs e)
{
sw.Start();
thread = new Thread(new ThreadStart(NàchsterWert));
thread.Start();
Cursor = Cursors.AppStarting;
textBox1.Cursor = Cursor;
}

void NàchsterWert()
{
while (!abbruch)
{
float wert = performanceCounter1.NextValue();
if (werte.Keys.Count == 0)
werte.Add(sw.ElapsedMilliseconds, wert);
else
if (sw.ElapsedMilliseconds != werte.Keys.Last())
werte.Add(sw.ElapsedMilliseconds, wert);
}
}

private void btnStop_Click(object sender, EventArgs e)
{
abbruch = true;
while (thread != null && thread.IsAlive)
{
Thread.Sleep(100); Application.DoEvents();
}
foreach (long key in werte.Keys)
textBox1.AppendText(
key.ToString() + ", " + werte[key].ToString() + "");
Cursor = Cursors.Default;
textBox1.Cursor = Cursor;
}
}
}


ciao Frank
Dipl. Inf. Frank Dzaebel [MCP, MVP C#]
http://Dzaebel.NET

Ähnliche fragen