Gewusst wie: Lesen von Windows-Leistungsindikatoren
Aktualisiert: November 2007
Einige Anwendungen und Windows-Subsysteme machen Leistungsdaten durch das Windows-Leistungssystem verfügbar. Auf diese Zähler kann mit der PerformanceCounterCategory-Klasse und mit der PerformanceCounter-Klasse zugegriffen werden, die sich im System.Diagnostics-Namespace befinden.
Im folgenden Codebeispiel werden diese Klassen verwendet, um einen Zähler abzurufen und anzuzeigen, der von Windows aktualisiert wird, um die prozentuale Prozessorauslastung in Bezug auf die Zeit anzuzeigen.
Hinweis: |
---|
Dieses Beispiel erfordert Administratorrechte für die Ausführung unter Windows Vista. |
Beispiel
// processor_timer.cpp
// compile with: /clr
#using <system.dll>
using namespace System;
using namespace System::Threading;
using namespace System::Diagnostics;
using namespace System::Timers;
ref struct TimerObject
{
public:
static String^ m_instanceName;
static PerformanceCounter^ m_theCounter;
public:
static void OnTimer(Object^ source, ElapsedEventArgs^ e)
{
try
{
Console::WriteLine("CPU time used: {0,6} ",
m_theCounter->NextValue( ).ToString("f"));
}
catch(Exception^ e)
{
if (dynamic_cast<InvalidOperationException^>(e))
{
Console::WriteLine("Instance '{0}' does not exist",
m_instanceName);
return;
}
else
{
Console::WriteLine("Unknown exception... ('q' to quit)");
return;
}
}
}
};
int main()
{
String^ objectName = "Processor";
String^ counterName = "% Processor Time";
String^ instanceName = "_Total";
try
{
if ( !PerformanceCounterCategory::Exists(objectName) )
{
Console::WriteLine("Object {0} does not exist", objectName);
return -1;
}
}
catch (UnauthorizedAccessException ^ex)
{
Console::WriteLine("You are not authorized to access this information.");
Console::Write("If you are using Windows Vista, run the application with ");
Console::WriteLine("administrative privileges.");
Console::WriteLine(ex->Message);
return -1;
}
if ( !PerformanceCounterCategory::CounterExists(
counterName, objectName) )
{
Console::WriteLine("Counter {0} does not exist", counterName);
return -1;
}
TimerObject::m_instanceName = instanceName;
TimerObject::m_theCounter = gcnew PerformanceCounter(
objectName, counterName, instanceName);
System::Timers::Timer^ aTimer = gcnew System::Timers::Timer();
aTimer->Elapsed += gcnew ElapsedEventHandler(&TimerObject::OnTimer);
aTimer->Interval = 1000;
aTimer->Enabled = true;
aTimer->AutoReset = true;
Console::WriteLine("reporting CPU usage for the next 10 seconds");
Thread::Sleep(10000);
return 0;
}
Siehe auch
Konzepte
Einführung in die Überwachung von Leistungsschwellenwerten