获取指定进程占用内存和cpu
public class ProHelper
{
private static Process _pro { get; set; }
private static bool _isExist { get; set; }
/// <summary>
/// 进程名称
/// </summary>
/// <param name="name"></param>
public ProHelper(string name) {
var pro = Process.GetProcessesByName(name)[0];
if (pro == null)
{
_isExist = false;
}
else {
_isExist = true;
_pro = pro;
}
}
public Process Pro { get { return _pro; } }
/// <summary>
/// 指示进程是否存在
/// </summary>
public bool IsExist { get { return _isExist; } }
/// <summary>
/// 获取内存(b)
/// </summary>
/// <returns></returns>
public float GetMemory() {
PerformanceCounter pf1 = new PerformanceCounter("Process", "Working Set", _pro.ProcessName);
return pf1.NextValue();
}
/// <summary>
/// 获取cpu
/// </summary>
/// <returns>百分比</returns>
public float GetCPU (){
PerformanceCounter cpuCounter = new PerformanceCounter("Process", "% Processor Time", _pro.ProcessName);
return cpuCounter.NextValue();
}
}
获取所有进程
public static List<string> GetProcesses()
{
return Process.GetProcesses().Select(a => a.ProcessName).ToList();
}
获取服务名称和状态
public static Tuple<string, ServiceControllerStatus> GetService(string name)
{
var services = ServiceController.GetServices();
var service = services.FirstOrDefault(a => a.ServiceName == name);
return service == null ? null : new Tuple<string, ServiceControllerStatus>(service.DisplayName, service.Status);
}
获取磁盘空间使用情况
/// <summary>
///
/// </summary>
/// <param name="name">卷名 例如C</param>
/// <returns>总大小 空闲大小</returns>
public static Tuple<long, long> GetDiskSpace(string name)
{
var str_HardDiskName = name + @":\";
System.IO.DriveInfo[] drives = System.IO.DriveInfo.GetDrives();
foreach (System.IO.DriveInfo drive in drives)
{
if (drive.Name == str_HardDiskName)
{
return new Tuple<long, long>(drive.TotalSize, drive.TotalFreeSpace);
}
}
return null;
}
获取总内存使用情况
/// <summary>
/// 返回剩余内存和总内存(MB)
/// </summary>
/// <returns>剩余内存 总内存</returns>
public static Tuple<float, float> GetRam(){
PerformanceCounter ramCounter = new PerformanceCounter("Memory", "Available MBytes");
var avRam = ramCounter.NextValue();
PerformanceCounter MaxramCounter = new PerformanceCounter("Memory", "Commit Limit");
var maxRam = ((float)MaxramCounter.NextValue()) / (1024 * 1024);
return new Tuple<float, float>(avRam, maxRam);
}
可以使用以下代码查看所有分类(命名很规范 看名称知道是什么)
PerformanceCounterCategory[] pcc = PerformanceCounterCategory.GetCategories();
foreach (var item in pcc)
{
Console.WriteLine(item.CategoryName);
var list = item.GetCounters();
foreach (var l in list)
{
Console.WriteLine(l.CounterName);
string[] counters = item.GetInstanceNames();
foreach (var c in counters)
{
Console.WriteLine(c);
}
}
}
使用
PerformanceCounter pf1 = new PerformanceCounter("Process", "Working Set", _pro.ProcessName);
其中
Process是具体进程的信息
Processor是总体信息