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 :
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 :
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
.
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.
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:
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.1
2
3
| PerformanceCounter SentCounter;
SentCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", devices[1]);
int value = SentCounter.NextValue(); |
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
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 ]