c#如何获取cup,内存,硬盘的利用率?
如题,有做个这方面的吗?请给一下设计思路最好能提供代码,分不够在加.
[解决办法]
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
namespace Windows.Help
{
public partial class SystemInfo : Form
{
public SystemInfo()
{
InitializeComponent();
}
[DllImport( "kernel32 ")]
public static extern void GetWindowsDirectory(StringBuilder WinDir, int count);
[DllImport( "kernel32 ")]
public static extern void GetSystemDirectory(StringBuilder SysDir, int count);
[DllImport( "kernel32 ")]
public static extern void GetSystemInfo(ref CPU_INFO cpuinfo);
[DllImport( "kernel32 ")]
public static extern void GlobalMemoryStatus(ref MEMORY_INFO meminfo);
[DllImport( "kernel32 ")]
public static extern void GetSystemTime(ref SYSTEMTIME_INFO stinfo);
//定义CPU的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct CPU_INFO
{
public uint dwOemId;
public uint dwPageSize;
public uint lpMinimumApplicationAddress;
public uint lpMaximumApplicationAddress;
public uint dwActiveProcessorMask;
public uint dwNumberOfProcessors;
public uint dwProcessorType;
public uint dwAllocationGranularity;
public uint dwProcessorLevel;
public uint dwProcessorRevision;
}
//定义内存的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_INFO
{
public uint dwLength;
public uint dwMemoryLoad;
public uint dwTotalPhys;
public uint dwAvailPhys;
public uint dwTotalPageFile;
public uint dwAvailPageFile;
public uint dwTotalVirtual;
public uint dwAvailVirtual;
}
//定义系统时间的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct SYSTEMTIME_INFO
{
public ushort wYear;
public ushort wMonth;
public ushort wDayOfWeek;
public ushort wDay;
public ushort wHour;
public ushort wMinute;
public ushort wSecond;
public ushort wMilliseconds;
}
private void button1_Click(object sender, EventArgs e)
{
//调用GetWindowsDirectory和GetSystemDirectory函数分别取得Windows路径和系统路径
const int nChars = 128;
StringBuilder Buff = new StringBuilder(nChars);
GetWindowsDirectory(Buff, nChars);
WindowsDirectory.Text = "Windows路径: " + Buff.ToString();
GetSystemDirectory(Buff, nChars);
SystemDirectory.Text = " 系统路径: " + Buff.ToString();
//调用GetSystemInfo函数获取CPU的相关信息
CPU_INFO CpuInfo;
CpuInfo = new CPU_INFO();
GetSystemInfo(ref CpuInfo);
NumberOfProcessors.Text = "本计算机中有 " + CpuInfo.dwNumberOfProcessors.ToString() + "个CPU ";
ProcessorType.Text = "CPU的类型为 " + CpuInfo.dwProcessorType.ToString();
ProcessorLevel.Text = "CPU等级为 " + CpuInfo.dwProcessorLevel.ToString();
OemId.Text = "CPU的OEM ID为 " + CpuInfo.dwOemId.ToString();
PageSize.Text = "CPU中的页面大小为 " + CpuInfo.dwPageSize.ToString();
//调用GlobalMemoryStatus函数获取内存的相关信息
MEMORY_INFO MemInfo;
MemInfo = new MEMORY_INFO();
GlobalMemoryStatus(ref MemInfo);
MemoryLoad.Text = MemInfo.dwMemoryLoad.ToString() + "%的内存正在使用 ";
TotalPhys.Text = "物理内存共有 " + MemInfo.dwTotalPhys.ToString() + "字节 ";
AvailPhys.Text = "可使用的物理内存有 " + MemInfo.dwAvailPhys.ToString() + "字节 ";
TotalPageFile.Text = "交换文件总大小为 " + MemInfo.dwTotalPageFile.ToString() + "字节 ";
AvailPageFile.Text = "尚可交换文件大小为 " + MemInfo.dwAvailPageFile.ToString() + "字节 ";
TotalVirtual.Text = "总虚拟内存有 " + MemInfo.dwTotalVirtual.ToString() + "字节 ";
AvailVirtual.Text = "未用虚拟内存有 " + MemInfo.dwAvailVirtual.ToString() + "字节 ";
//调用GetSystemTime函数获取系统时间信息
SYSTEMTIME_INFO StInfo;
StInfo = new SYSTEMTIME_INFO();
GetSystemTime(ref StInfo);
Date.Text = StInfo.wYear.ToString() + "年 " + StInfo.wMonth.ToString() + "月 " + StInfo.wDay.ToString() + "日 ";
Time.Text = (StInfo.wHour + 8).ToString() + "点 " + StInfo.wMinute.ToString() + "分 " + StInfo.wSecond.ToString() + "秒 ";
}
private void button2_Click(object sender, EventArgs e)
{
this.Close();
}
}
}
[解决办法]
如何用C#实时获取CPU利用率!
using System;
using System.Diagnostics;
using System.Threading;
public class CpuLoadInfo
{
// auxiliary print methods
private static void Say ( string txt )
{
Console.WriteLine(txt);
}
// auxiliary print methods
private static void Say()
{
Say( " ");
}
// The main method. Command line arguments are ignored.
[STAThread]
public static void Main()
{
Say( "$Id: CpuLoadInfo.cs,v 1.2 2002/08/17 17:45:48 rz65 Exp $ ");
Say();
Say( "Attempt to create a PerformanceCounter instance: ");
Say( "Category name = " CategoryName);
Say( "Counter name = " CounterName);
Say( "Instance name = " InstanceName);
PerformanceCounter pc
= new PerformanceCounter(CategoryName,CounterName,InstanceName);
Say( "Performance counter was created. ");
Say( "Property CounterType: " pc.CounterType);
Say();
Say( "Property CounterHelp: " pc.CounterHelp);
Say();
Say( "Entering measurement loop. ");
while (true)
{
Thread.Sleep(1000); // wait for 1 second
float cpuLoad = pc.NextValue();
Say( "CPU load = " cpuLoad " %. ");
}
}
// constants used to select the performance counter.
private const string CategoryName = "Processor ";
private const string CounterName = "% Processor Time ";
private const string InstanceName = "_Total ";
}
这是在我计算机上的计算结果:
Entering measurement loop.
CPU load = 0 %.
CPU load = 1.941746 %.
CPU load = 4.854369 %.
CPU load = 10 %.
CPU load = 0 %.
CPU load = 2.999997 %.
CPU load = 0.9900987 %.
CPU load = 0 %.
[解决办法]
你可以参考并下载源代码 《用C#开发较完整的Windows任务管理器 》
http://www.cnblogs.com/lemony/archive/2007/04/11/708309.html