Frage

Ich arbeite an einem Hintergrundprogramm, das lange läuft, und ich habe ein externes Protokollierungsprogramm (SmartInspect) dass ich regelmäßig mit einigen Werten füttern möchte, um es in Echtzeit beim Debuggen zu überwachen.

Ich weiß X% CPU, markieren Sie dies im Protokoll.

Ich habe einen Hintergrund -Thread, der regelmäßig Statistiken an SmartInspekte vermittelt, wie Speicherverbrauch, Arbeitssatz usw.

Ist es für diesen Thread möglich, ein einigermaßen genaues Maß dafür zu erhalten, wie viel von den CPU -Ressourcen des Computers er verbraucht? Das Hauptprogramm ist eine einsthread-Anwendung (abgesehen von dem Watchdog-Thread, der Statistiken protokolliert). Wenn also eine Technik beschränkt ist Wie viel verwendet ein einzelner Thread? Dann wäre das auch gut.

Ich fand einige Einträge, die mit etwas genannt werden Reisung Für Linux und C. gibt es etwas Ähnliches, das ich dafür verwenden kann?


Bearbeiten: OK, ich habe den Performance-Counter-Weg ausprobiert, aber jedes Mal, wenn es sich um die Speicherverwendung und die Müllkollektion handelt, fügte es jedes Mal eine Menge GC-Daten hinzu. Ich schätze, ich werde diesen Teil vorerst einfach auslassen.

War es hilfreich?

Lösung

Sie können auch verwenden Systemdiagnose.Process.totalProcessortime und Systemdiagnose.ProcessThread.totalProcessortime Eigenschaften zur Berechnung Ihrer Prozessorverwendung als diese Artikel beschreibt.

Andere Tipps

Sich ansehen System.Diagnostics.PerformanceCounter. Wenn Sie hochlaufen perfmon.exe, Sie werden den Bereich der Leistungszähler sehen, die Ihnen zur Verfügung stehen (setzen Sie das "Leistungsobjekt" auf "Prozess"), von denen eine "% Prozessorzeit" ist.

Sie können durch das System.diagnostic.performanceCounter -Klasse. Hier ist ein Beispiel dafür, dass jemand die CPU -Nutzung überwacht:

http://blogs.msdn.com/dotnetinterop/archive/2007/02/02/system-diagnostics-performancecounter----t-time-on-multi-core-or-multi-cpu.aspx

Beachten Sie, dass dies erhöhte Privilegien erfordert. Und es kann einen Performance -Treffer geben.

Es ist gut, dass Sie sich bei Monitoren wie SmartInspect anmelden. Windows selbst sammelt jedoch die Daten für jede Ressource in diesem Fall in Ihrem Programm (oder Prozess). WMI ist der Standard für die Anwendungsüberwachung. Wir können die von WMI erfassten Daten anzeigen. Viele Anwendungsmanagement-, Gesundheitsüberwachungs- oder Applicaiton -Überwachungstools unterstützen die WMI.

Daher würde ich Sie nicht empfehlen, Ihre CPU -Verwendung in der Anwendung in einer Protokolldatei zu protokollieren.

Wenn Sie der Meinung sind, dass Verfügbarkeit und Leistung kritisch sind, entscheiden Sie sich für Lösungen wie Microsoft Operations Manager Solution.

Um eine Vorstellung von WMI zu bekommen und die Liste der Prozesse zu erhalten, siehe unten: - Win32_PerfFormattedData_PerfProc_Process Um die CPU -Zeit zu erhalten, ist Filter processIDSiehe diesen Artikel- Sie können die prozessID von Win32_Process -Klasse erhalten.

WMI hat C# leicht gemacht von Kevin Matthew Goss

oConn.Username = "JohnDoe";
oConn.Password = "JohnsPass";

System.Management.ManagementScope oMs = new System.Management.ManagementScope("\\MachineX", oConn);    

//get Fixed disk stats
System.Management.ObjectQuery oQuery = new System.Management.ObjectQuery("select FreeSpace,Size,Name from Win32_LogicalDisk where DriveType=3");

//Execute the query 
ManagementObjectSearcher oSearcher = new ManagementObjectSearcher(oMs,oQuery);

//Get the results
ManagementObjectCollection oReturnCollection = oSearcher.Get();   

//loop through found drives and write out info
foreach( ManagementObject oReturn in oReturnCollection )
{
    // Disk name
    Console.WriteLine("Name : " + oReturn["Name"].ToString());
    // Free Space in bytes
    Console.WriteLine("FreeSpace: " + oReturn["FreeSpace"].ToString());
    // Size in bytes
    Console.WriteLine("Size: " + oReturn["Size"].ToString());
} 

Sie können den Prozess auch vom Remote -System überwachen.

In diesem Code -Projektartikel wird beschrieben, wie der Hochleistungs -Timer verwendet wird:

http://www.codeprroject.com/kb/cs/highperformancetimercshar.aspx

Sie können es verwenden, um die Ausführung Ihres Codes zu zeitieren.

Hier finden Sie eine Reihe von Open Source C# -Profilern:

http://csharp-source.net/open-source/profile

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top