2012-09-01 7 views
5

Ich schreibe ein Programm, das verschiedene Ressourcen des Computers überwacht, wie CPU-Auslastung und so weiter. Ich möchte auch die GPU-Auslastung (die GPU-Last, nicht die Temperatur) überwachen.Wie kann ich die GPU-Auslastung lesen?

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Diagnostics; 
using DannyGeneral; 


namespace CpuUsage 
{ 
    public partial class Form1 : Form 
    { 
     private bool processEnded; 
     private Process[] processList; 
     private string timeStarted; 
     private string timeEnded; 
     private List<float> processValues; 
     private bool alreadyRun; 
     private DateTime dt; 
     private DateTime dt1; 
     private PerformanceCounter theCPUCounter; 
     private PerformanceCounter theMemCounter; 
     private PerformanceCounter specProcessCPUCounter; 
     private float cpuUsage; 
     private float memUsage; 
     private List<float> Values; 

     public Form1() 
     { 
      InitializeComponent(); 

      processEnded = false; 
      processList = Process.GetProcesses(); 
      for (int i = 0; i < processList.Count(); i++) 
      { 
       listView1.Items.Add(processList[i].ProcessName); 
      } 
      processValues = new List<float>(); 
      alreadyRun = false; 
      dt = DateTime.Now; 


      Values = new List<float>(); 
       theCPUCounter = new PerformanceCounter("Processor", "% Processor Time", "_Total"); 
       theMemCounter = new PerformanceCounter("Memory", "Available MBytes"); 
       specProcessCPUCounter = new PerformanceCounter("Process", "% Processor Time", Process.GetCurrentProcess().ProcessName); 

       Logger.Write("The Program Started At *** " + DateTime.Now.ToShortTimeString()); 

     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void timer1_Tick(object sender, EventArgs e) 
     { 
      memUsage = theMemCounter.NextValue(); 
      label1.Text = memUsage.ToString(); 
      Logger.Write("Memory Usage " + memUsage.ToString()); 
      cpuUsage = this.theCPUCounter.NextValue(); 
      label2.Text = cpuUsage.ToString(); 
      Logger.Write("Cpu Usage " + this.cpuUsage.ToString()); 
      Values.Add(cpuUsage); 
      isProcessRunning(); 
      if (alreadyRun == true) 
      { 
       processValues.Add(cpuUsage); 
      } 

     } 
+2

Bei zukünftigen Fragen sollten Sie eine kleinere Probe mit nur relevantem Code bereitstellen. Ihr aktueller hat viel zu viele UI-bezogene Sachen, wo einfach 'Console.Write (" CPU-Auslastung: {0} ", neuer PerformanceCounter (" Prozessor "," Prozessorzeit% "," _Total "); .NextValue()) würde ausreichen. –

Antwort

3

Die video card's own CPU ist eine GPU genannt.

Geben Sie für Leistungsindikatoren in Bezug auf das, oder video (mit Start->Run->PerfMon oder die Eingabe einer PerfMon in das Suchfeld des Start Menü; der rechten Maustaste auf das Diagramm und wählen Add Counter...).

Wenn Ihr Grafikkartenhersteller keine Leistungsindikatoren für die GPU bereitgestellt hat, gibt es keine für Sie.

+0

Sicherlich sind Leistungsindikatoren nicht die einzige Informationsquelle über ein laufendes System. –

+0

@BenVoigt: Ich wollte nie sagen, dass sie es waren. Ich schlug das als eine Quelle vor, die auf dem anderen Code basiert. Fühlen Sie sich frei, anderen zu bieten. :-) –

+0

Ich bin mir nicht sicher, was dein letzter Satz dann bedeutet. In jedem Fall gibt es RivaTuner, der mit einer API für den programmatischen Datenzugriff ausgestattet ist, sowie mit vielen anderen Überwachungsprogrammen, die diese Daten ohne Leistungsindikatoren erhalten. –

Verwandte Themen