[.Net] Systeminfos auslesen

Vudu3

Admiral Special
Mitglied seit
11.11.2001
Beiträge
1.574
Renomée
6
Standort
Duisburg
Hi,

ich möchte für unseren kleinen Server ein Tool schreiben (in VB oder C#), was mir die Systeminfos des Rechners zusammenfassen kann. Das wären z.B. CPU Last, Speicherauslastung usw.

Problem ist nur, ich habe keine Ahnung wie ich diese abfragen kann. Vielleicht könnt ihr mir da helfen...dankeschön:)
 
also Samurize benutzt Speedfan oder MBM dazu
andere Tools benutzen auch ähnliche Plugins

MfG Micha
 
Nene...das Programm sollte dann schon von mir selber sein. Da kann ich die Features so anpassen wie ich möchte...da wäre SpeedFan oder MBM nicht die optimale Lösung für.
 
"Nichts leichter als das", sprach Pickeldi zu Frederick und öffnete sein Visual Studio. Falls Du die Antwort noch gebrauchen kannst, hier die sehr einfach Lösung: Performance Counter. Über diese netten Systemobjekte kannst Du alles abfragen, was das Herz begehrt. Hier ein kleines Beispiel ohne Fehlerprüfung u.ä., das Dir im Sekundentakt die CPU-Last auf die Konsole ausgibt:

Code:
using System;
using System.Diagnostics;
namespace ConsoleApplication1
{
  class Class1
  {	
    [STAThread]
    static void Main(string[] args)
    {
      // Performance counter erzeugen
      PerformanceCounter cpu = new PerformanceCounter();

      // Namen des abzufragenden Rechners im Netz ("." = lokaler Rechner)
      cpu.MachineName = ".";

      // Categoriename (s.u.)
      cpu.CategoryName = "Process";

      // Countername (s.u.)
      cpu.CounterName = "% Processor Time";

      // Instanzname (in diesem Fall der Name des Prozesses)
      cpu.InstanceName = "Idle";

      // Initialisierung
      cpu.NextValue();

      while(true)
      {
        // nächsten berechneten Wert abrufen und ausgeben
        Console.WriteLine((100.0 - cpu.NextValue()).ToString());

        // Eine Sekunde lang warten
	System.Threading.Thread.Sleep(1000);
      }
    }		
  }
}

PerformanceCounter sind in Kategorien aufgeteilt, z.B. wie oben "Process" für alles, was mit laufenden Prozessen zusammenhängt oder "Network Interface" für den Datenverkehr über Netzadapter usw. Unterhalb jeder Kategorie findet man gewöhnlich mehrere Counter, je nachdem, welche Information man sucht. Für "Network Interface" gäbe es beispielsweise "Bytes Received/sec" ebenso wie "Bytes Sent/sec" usw. Man braucht sich nur die richtigen rauszupicken. Die Eigenschaft "InstanceName" bezieht sich dann auf die Instanz, von der man Informationen haben will. Bei der Kategorie "Process" ist das der Prozessname, bei "Network Interface" der Name des Netzwerkadapters, bei "LogicalDisk" der Name der Partition usw.

Woher die ganzen Kategorien und Counternamen bekommen? Zum einen bietet der Namespace "Diagnostics" (s.o.) eine Vielzahl von Funktionen, um alle vorhandenen Kategorien, Counters und Instanzen auszulesen (so kommt man z.B. auch an die Namen der laufenden Prozesse, an die eingebauten Festplatten, Netzwerkkarten usw.), zum anderen kann man sie sich auch von Hand heraussuchen. Da gibt's zwei Möglichkeiten:

a) Du hast Visual Studio. Öffne den Server-Explorer, wähle den entsprechenden Rechner aus und sieh nach unter "Leistungsindikatoren". Die aufgeführten Knoten sind die Kategorien, die weiteren Unterknoten die Counter. Per Rechtsklick und "Kategorie anzeigen" auf einen der Knoten bekommst Du sehr detaillierte Informationen, inklusive einer ausführlichen Beschreibung über jeden Counter etc.

b) Über die Systemsteuerung. Sorry, hab' hier nur die englische Windowsversion, also... Control Panel/Administrative Tools/Performance. Im neuen Fenster links in der Baumansicht "System Monitor" wählen und dann in der rechten Hälfte in der Toolbar "Add" (oder Ctrl+i). Dann siehst Du ebenfalls eine Liste aller Kategorien mit allen Countern und deren Beschreibung. Hier siehst Du übrigens auch gleich die Instanzen auf dem jeweils gewählten Rechner.

Gruß, Picke... ähm Jehova :D
 
Zurück
Oben Unten