实例介绍
【实例截图】
【核心代码】
namespace SystemMonitor { /// <summary> /// Summary description for SystemData. /// </summary> public class SystemData { #region "Constructor" public SystemData() { PerformanceCounterCategory cat = new PerformanceCounterCategory("Network Interface"); _instanceNames = cat.GetInstanceNames(); _netRecvCounters = new PerformanceCounter[_instanceNames.Length]; for (int i =0; i<_instanceNames.Length; i ) _netRecvCounters[i] = new PerformanceCounter(); _netSentCounters = new PerformanceCounter[_instanceNames.Length]; for (int i =0; i<_instanceNames.Length; i ) _netSentCounters[i] = new PerformanceCounter(); _compactFormat = false; } #endregion #region "Properties" public bool CompactFormat { get { return _compactFormat; } set { _compactFormat = value; } } #endregion #region "Public Methods" public string GetProcessorData() { double d = GetCounterValue(_cpuCounter, "Processor", "% Processor Time", "_Total"); return _compactFormat? (int)d "%": d.ToString("F") "%"; } public string GetMemoryVData() { string str; double d = GetCounterValue(_memoryCounter, "Memory", "% Committed Bytes In Use", null); str = d.ToString("F") "% ("; d = GetCounterValue(_memoryCounter, "Memory", "Committed Bytes", null); str = FormatBytes(d) " / "; d = GetCounterValue(_memoryCounter, "Memory", "Commit Limit", null); return str FormatBytes(d) ") "; } public string GetMemoryPData() { string s = QueryComputerSystem("totalphysicalmemory"); double totalphysicalmemory = Convert.ToDouble(s); double d = GetCounterValue(_memoryCounter, "Memory", "Available Bytes", null); d = totalphysicalmemory - d; s = _compactFormat? "%": "% (" FormatBytes(d) " / " FormatBytes(totalphysicalmemory) ")"; d /= totalphysicalmemory; d *= 100; return _compactFormat? (int)d s: d.ToString("F") s; } public enum DiskData {ReadAndWrite, Read, Write}; public double GetDiskData(DiskData dd) { return dd==DiskData.Read? GetCounterValue(_diskReadCounter, "PhysicalDisk", "Disk Read Bytes/sec", "_Total"): dd==DiskData.Write? GetCounterValue(_diskWriteCounter, "PhysicalDisk", "Disk Write Bytes/sec", "_Total"): dd==DiskData.ReadAndWrite? GetCounterValue(_diskReadCounter, "PhysicalDisk", "Disk Read Bytes/sec", "_Total") GetCounterValue(_diskWriteCounter, "PhysicalDisk", "Disk Write Bytes/sec", "_Total"): 0; } public enum NetData {ReceivedAndSent, Received, Sent}; public double GetNetData(NetData nd) { if (_instanceNames.Length==0) return 0; double d =0; for (int i=0; i<_instanceNames.Length; i ) { d = nd==NetData.Received? GetCounterValue(_netRecvCounters[i], "Network Interface", "Bytes Received/sec", _instanceNames[i]): nd==NetData.Sent? GetCounterValue(_netSentCounters[i], "Network Interface", "Bytes Sent/sec", _instanceNames[i]): nd==NetData.ReceivedAndSent? GetCounterValue(_netRecvCounters[i], "Network Interface", "Bytes Received/sec", _instanceNames[i]) GetCounterValue(_netSentCounters[i], "Network Interface", "Bytes Sent/sec", _instanceNames[i]): 0; } return d; } enum Unit {B, KB, MB, GB, ER} public string FormatBytes(double bytes) { int unit = 0; while (bytes>1024) { bytes /= 1024; unit; } string s = _compactFormat? ((int)bytes).ToString(): bytes.ToString("F") " "; return s ((Unit)unit).ToString(); } public string QueryComputerSystem(string type) { string str = null; ManagementObjectSearcher objCS = new ManagementObjectSearcher("SELECT * FROM Win32_ComputerSystem"); foreach ( ManagementObject objMgmt in objCS.Get() ) { str = objMgmt[type].ToString(); } return str; } public string QueryEnvironment(string type) { return Environment.ExpandEnvironmentVariables(type); } public string LogicalDisk() { string diskSpace = string.Empty; object device, space; ManagementObjectSearcher objCS = new ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"); foreach ( ManagementObject objMgmt in objCS.Get() ) { device = objMgmt["DeviceID"]; // C: if (null !=device) { space = objMgmt["FreeSpace"]; // C:10.32 GB, D:5.87GB if (null!=space) diskSpace = device.ToString() FormatBytes(double.Parse(space.ToString())) ", "; } } diskSpace = diskSpace.Substring(0, diskSpace.Length-2); return diskSpace; } #endregion #region "Private Helpers" double GetCounterValue(PerformanceCounter pc, string categoryName, string counterName, string instanceName) { pc.CategoryName = categoryName; pc.CounterName = counterName; pc.InstanceName = instanceName; return pc.NextValue(); } #endregion #region "Members" bool _compactFormat; PerformanceCounter _memoryCounter = new PerformanceCounter(); PerformanceCounter _cpuCounter = new PerformanceCounter(); PerformanceCounter _diskReadCounter = new PerformanceCounter(); PerformanceCounter _diskWriteCounter = new PerformanceCounter(); string[] _instanceNames; PerformanceCounter[] _netRecvCounters; PerformanceCounter[] _netSentCounters; #endregion } public delegate void OnLogicalDiskProc(string s); }
标签: 监控
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论