2009-05-29 9 views
2

Ich bin in einem seltsamen Problem auf Vista mit der Leistungsüberwachung API. Ich verwende derzeit Code, der auf XP/2k funktioniert, basierend auf PdhGetFormattedCounterValue(). Ich beginnen PdhExpandWildCardPath Sie mit den Zählern zu erweitern (Ich habe Interesse an Gesamtnetzwerkstatistik), die Zähler Ich betrachte sind:Problem mit Leistungsindikatoren auf Vista

 
\\Network Interface(*)\\Bytes Received/sec 
\\Network Interface(*)\\Bytes Sent/sec 
\\Processor(_Total)\\% Processor Time 

Das Problem ist, dass bei ihrem ersten Anruf sie zurückkehren PDH_INVALID_DATA, ich don Ich denke, das ist ein Problem, denn wenn ich es erneut abfrage, werde ich anfangen, Daten ohne den Fehler zu bekommen. Das Problem ist folgendes: Während die Prozessorzeit genau wie erwartet arbeitet, gibt keiner der Netzwerkschnittstellenzähler irgendwas zurück - nur 0 ständig. Ich habe verifiziert, dass ich mit Perfmon Daten normal berichte, so dass ich nicht weiß, was das Problem sein könnte. Ich fing dies bei MS:

http://support.microsoft.com/?scid=kb%3Ben-us%3B287159&x=11&y=9

Aber ich bin nicht daran interessiert, in mehrsprachigen für meine Aufgabe, so dass ich glaube nicht, das relevant ist. Ich werde sehen, ob ich mir einen Basiscode ausdenken kann, der genau zeigt, was ich mache, aber nichts bringt irgendwas merkwürdiges zurück, und es funktionierte auf XP/2k, also vermute ich, dass sich etwas unter der Haube geändert hat. Vielen Dank!

Antwort

1

Es stellte sich heraus, dass die Netzwerkschnittstellen beide Platzhalter sind, während der Prozessor ist tatsächlich bereits durch die Leistungsüberwachung zusammengerollt. Was ich nicht erkannte war, dass es PdhExpandWildCardPath nicht etwas zurückgegeben hat, das direkt von PdhAddCounter verwendbar ist. Damit meine ich, dass, wenn ExpandWildCard 3 erweiterte Übereinstimmungen zurückgibt, sie als null getrennte Strings zurückkommen - ich habe das verstanden, aber ich hatte angenommen, dass AddCounter effektiv einen Zähler erstellen würde, der alle drei enthält. Nein, Realität ist, dass ich jeden Pfad einzeln aufbrechen und einzeln von AddCounter anfordern muss, und dann die Ergebnisse manuell auflisten, wenn ich sie erhalte.

Hoffentlich hilft das jemand anderen, den gleichen Fehler zu vermeiden, den ich mit weniger Frustration machte. ;)