2012-09-01 9 views
5

Sto scrivendo un programma che monitora varie risorse del computer, come l'utilizzo della CPU e così via. Voglio monitorare l'utilizzo della GPU (anche il carico della GPU, non la temperatura).Come posso leggere la carica della GPU?

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

Per domande future, si prega di fornire un campione più piccolo con solo codice rilevante. Il tuo attuale ha troppa roba relativa all'interfaccia utente dove semplice 'Console.Write (" Utilizzo CPU: {0} ", nuovo PerformanceCounter (" Processore ","% Tempo processore "," _Totale "); .NextValue()) 'sarebbe sufficiente. –

risposta

3

Il video card's own CPU è chiamato GPU.

Cercare i contatori delle prestazioni relativi a tale o video (utilizzando Start->Run->PerfMon o digitando PerfMon nella casella di ricerca del menu di Start; tasto destro del mouse sul grafico e scegliere Add Counter...).

Se il produttore della scheda video non ha fornito contatori delle prestazioni per la GPU, non ce ne sono per voi.

+0

Sicuramente i contatori delle prestazioni non sono l'unica fonte di informazioni su un sistema in esecuzione. –

+0

@ BenVoigt: non ho mai avuto intenzione di dire che lo erano. L'ho suggerito come fonte, sulla base dell'altro codice pubblicato. Sentiti libero di offrire agli altri. :-) –

+0

Non sono sicuro di cosa significhi la tua frase finale. In ogni caso, c'è RivaTuner, che viene fornito con un'API per accedere ai dati a livello di codice, così come molti altri programmi di monitoraggio che ottengono questi dati senza contatori delle prestazioni. –

Problemi correlati