[C#] Performance Counter Instance Name bug ?

Pagina: 1
Acties:

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 14:54
Ik ben dus sinds kort met een tooltje bezig in C# en daar wil ik gebruik maken van een performance counter (= PC). Ik wil namelijk voor mijn ethernet adapters de in- en output meten

Het eerste wat ik dus doe is effe de ethernet adapters ophalen via de volgende code :
code:
1
2
PerformanceCounterCategory category = new PerformanceCounterCategory("Network Interface");
string[] devices = category.GetInstanceNames();


Nu staan in mijn array devices de instance namen van de counters die er zijn. Bij mij zijn dat :
• MS TCP Loopback interface
• Realtek RTL8139 Family PCI Fast Ethernet NIC - Packet Scheduler Miniport

Nu wil ik bijvoorbeeld voor die onderste ethernet kaart de waarden ophalen, dat doe ik met het volgende stukje code :
code:
1
2
3
PerformanceCounter SentCounter;
SentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", devices[1]);
int value = SentCounter.NextValue();
Als ik dit probeer begint hij echter te zeuren dat hij de instance naam niet kent, aangezien ik die instance namen zelf ophaal via de PC's, lijkt me dit raar. Na wat onderzoek blijkt echter dat wanneer ik de code uitvoer hij de instance naam die ik opgeef, afkapt op 64 tekens, waardoor er dus "Realtek RTL8139 Family PCI Fast Ethernet NIC - Packet Scheduler " als instance naam staat, welke hij dus logischerwijs niet kent.

Ik heb al gezocht op MSDN of ik hier iets over kon vinden en ik ben nog iemand tegen gekomen die exact hetzelfde probleem heeft.

De code is verder wel goed, want op mijn laptop heb ik bijvoorbeeld een ethernet kaart met een kortere naam en daar werkt de code wel gewoon goed :S.

Iemand hier ervaring mee, of misschien een idee hoe ik dit kan oplossen ?

Edit : Ter verduidelijking, de instance namen komen wel goed in mijn string array. Tijdens het debuggen is de 'InstanceName' property van de PC ook goed, maar toch gaat het niet goed en kapt hij dus die naam af.

[ Voor 17% gewijzigd door sorted.bits op 14-10-2004 22:24 ]


  • mr_taipan
  • Registratie: Februari 2002
  • Laatst online: 03-12-2024
En werkt dit ook?

C#:
1
2
3
PerformanceCounter SentCounter;
SentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", category.GetInstanceNames()[1]);
int value = SentCounter.NextValue();

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 14:54
Hetzelfde probleem... bij debugging geeft hij bij dat PerformanceCounter object de volgende property ook weer :

code:
1
RawValue : 'SentCounter.RawValue' threw an exception of type 'System.InvalidOperationException'

[ Voor 15% gewijzigd door sorted.bits op 14-10-2004 22:56 ]


  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 14:54
Ok, het wordt nog vreemder, wanneer ik een voorbeeld project van Code Project download en daar de pre-compiled applicatie opstart dan werkt het gewoon. Recompile ik echter het zooitje, daarna gaat hij wel de instance naam weer afkorten. Raar.. zou dit een project/systeem setting kunnen zijn in combinatie met bepaalde windows instellingen ofzo ?

Url : Klik hier.

  • sorted.bits
  • Registratie: Januari 2000
  • Laatst online: 14:54
Ik weet in ieder geval een tijdelijke oplossing, of dit permanent is, kan ik nog niet zeggen...

Het verwijderen van het QOS protocol en de Virtual Machine interface (Virtual PC 2004) heeft er voor gezorgt dat hij mijn Instance Name weer herkent. Het werkt dus in ieder geval weer op mijn gewone PC en ik kom er later wel achter of dit de beste oplossing was ;).

  • Infinitive
  • Registratie: Maart 2001
  • Laatst online: 25-09-2023
sorted.bits schreef op 15 oktober 2004 @ 23:53:
Raar.. zou dit een project/systeem setting kunnen zijn in combinatie met bepaalde windows instellingen ofzo ?
Was het project soms voorgecompileerd op een oudere versie van het .net framework?

Is er een plaats waar je bugreports kan invullen? Dan zou je dat kunnen doen.

putStr $ map (x -> chr $ round $ 21/2 * x^3 - 92 * x^2 + 503/2 * x - 105) [1..4]

Pagina: 1