2012-09-01 86 views
5

我正在编写一个程序来监视计算机的各种资源,如CPU使用率等。我想监视GPU使用情况(GPU负载,而不是温度)。如何读取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

对于将来的问题,请考虑只提供相关代码的小样本。你的当前版本有太多的UI相关的东西,其中简单的'Console.Write(“CPU使用率:{0}”,新的PerformanceCounter(“Processor”,“%Processor Time”,“_Total”); .NextValue() )'就够了。 –

回答

3

video card's own CPU被称为GPU

查找与该或video性能计数器(使用Start->Run->PerfMon或输入在Start菜单的搜索框中PerfMon;在图形上单击鼠标右键,选择Add Counter...)。

如果您的视频卡制造商没有提供GPU的任何性能计数器,那么您没有任何获得。

+0

当然,性能计数器并不是关于正在运行的系统的唯一信息来源。 –

+0

@BenVoigt:我从来没有打算说他们是。我建议,作为一个来源,基于其他代码发布。随意提供其他人。 :-) –

+0

我不确定你的最后一句话意味着什么。在任何情况下,都有RivaTuner,它带有一个以编程方式访问数据的API,以及许多其他监控程序,它们在没有性能计数器的情况下获取这些数据。 –