using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
namespace Helper
{
public class RuntimeStatusHelper
{
///
/// 唯一实例
///
public readonly static RuntimeStatusHelper DataManager = new RuntimeStatusHelper();
private PerformanceCounter cpu = new PerformanceCounter("Processor", "% Processor Time", "_Total");//保持一个cpu实例,避免重复创建
//定义内存的信息结构
[StructLayout(LayoutKind.Sequential)]
public struct MEMORY_INFO
{
public uint dwLength; //当前结构体大小
public uint dwMemoryLoad; //当前内存使用率
public ulong ullTotalPhys; //总计物理内存大小
public ulong ullAvailPhys; //可用物理内存大小
public ulong ullTotalPageFile; //总计交换文件大小
public ulong ullAvailPageFile; //总计交换文件大小
public ulong ullTotalVirtual; //总计虚拟内存大小
public ulong ullAvailVirtual; //可用虚拟内存大小
public ulong ullAvailExtendedVirtual; //保留 这个值始终为0
}
[DllImport("kernel32")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GlobalMemoryStatusEx(ref MEMORY_INFO mi);//获取内存相关数据
///
/// 构造方法
///
private RuntimeStatusHelper()
{
cpu.NextValue();//因为第一次获取CPU使用率总是0,所以在此获取一次CPU使用率,避免画面显示CPU为0的情况
}
///
/// 获取电脑磁盘剩余空间
///
///
public string GetDrivers()
{
string result = "";
DriveInfo[] drives = DriveInfo.GetDrives();
foreach (DriveInfo drive in drives)
{
if (!drive.IsReady)
continue;
if (result.Length > 0) result += ",";
result += string.Format("{0}盘剩余{1}", drive.Name.Split(':')[0] + "盘剩余", FormatSize(drive.TotalFreeSpace));
}
return result;
}
///
/// 获取电脑IP地址
///
///
public string GetIPAddress()
{
string hostName = Dns.GetHostName();
IPAddress[] iPs = Dns.GetHostEntry(hostName).AddressList;
foreach (IPAddress ip in iPs)
{
if (ip.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
return ip.ToString();
}
}
return "";
}
///
/// 获取CPU实时占用率
///
///
public string GetCpuUtilization()
{
return String.Format("{0}", cpu.NextValue());
}
///
/// 获取内存实时占用率
///
///
public string GetMemoryUtilization()
{
return String.Format("{0}/{1}", FormatSize(GetUsedPhys()), FormatSize(GetTotalPhys()));
}
///
/// 格式化容量大小
///
/// 容量(B)
/// 已格式化的容量
private string FormatSize(double size)
{
double d = (double)size;
int i = 0;
while ((d > 1024) && (i < 5))
{
d /= 1024;
i++;
}
string[] unit = { "B", "KB", "MB", "G", "T" };
return (string.Format("{0} {1}", Math.Round(d, 2), unit[i]));
}
///
/// 获得当前内存使用情况
///
///
public MEMORY_INFO GetMemoryStatus()
{
MEMORY_INFO mi = new MEMORY_INFO();
mi.dwLength = (uint)Marshal.SizeOf(mi);
GlobalMemoryStatusEx(ref mi);
return mi;
}
///
/// 获得当前可用物理内存大小
///
/// 当前可用物理内存(B)
public ulong GetAvailPhys()
{
MEMORY_INFO mi = GetMemoryStatus();
return mi.ullAvailPhys;
}
///
/// 获得当前已使用的内存大小
///
/// 已使用的内存大小(B)
public ulong GetUsedPhys()
{
MEMORY_INFO mi = GetMemoryStatus();
return (mi.ullTotalPhys - mi.ullAvailPhys);
}
///
/// 获得当前总计物理内存大小
///
///