using System; using System.Collections.Generic; using System.Text; using System.Diagnostics; using System.Threading; using System.Management; using System.Runtime.InteropServices; using System.Data; using System.Data.SqlClient; using System.DirectoryServices; using System.Collections; using System.Configuration; using System.Collections.Specialized; using System.IO;
namespace MON.Client { public static class SysInfo { static Dictionary<string, PerformanceCounter> dic; static double DiskUsePercent; static double SysDiskUsePercent; static SysInfo() { try { dic = new Dictionary<string, PerformanceCounter>(); foreach (string setting in ConfigurationManager.AppSettings) { var arr = ConfigurationManager.AppSettings[setting].Split('#'); if (arr[arr.Length - 1] == "IsCounter") { try { var pc = new PerformanceCounter(arr[0], arr[1], arr[2]); dic.Add(setting, pc); } catch (Exception ex) { Console.WriteLine(arr[0] + "找不到"); Log.WriteLog(ex.Message); } } } } catch (Exception ex) { Console.WriteLine(ex.Message); Log.WriteLog(ex.Message); } } static void initDiskInfo() { #region 备忘 //只获取系统盘代码如下 //ManagementObject CPANInfo = new ManagementObject(string.Format("win32_logicaldisk.deviceid=/"{0}/"", System.Environment.SystemDirectory.Substring(0, 2))); //CPANInfo.Get(); //var s = Convert.ToDouble(CPANInfo["Size"]); //var l = Convert.ToDouble(CPANInfo["FreeSpace"]); //var d = (s - l) / s * 100; //return d; #endregion try { DriveInfo[] drives = DriveInfo.GetDrives(); long totalSize = 0; long freeSize = 0; long CTotalSize = 0; long CFreeSize = 0; foreach (DriveInfo drive in drives) { if (drive.DriveType == DriveType.CDRom) { continue; } totalSize += drive.TotalSize; freeSize += drive.TotalFreeSpace; if (drive.Name.StartsWith(System.Environment.SystemDirectory.Substring(0, 2))) { CTotalSize += drive.TotalSize; CFreeSize += drive.TotalFreeSpace; } } SysDiskUsePercent = (CTotalSize - CFreeSize) / (double)CTotalSize * 100; DiskUsePercent = (totalSize - freeSize) / (double)totalSize * 100; } catch (Exception ex) { Console.WriteLine(ex.Message); Log.WriteLog(ex.Message); } } public static void Init() { //如有取数之前进行的业务可放在这里,提高性能 initDiskInfo(); } public static double GetSysInfo(string InfoKey) { try { if (dic.ContainsKey(InfoKey)) { return dic[InfoKey].NextValue(); } else { if (InfoKey == "SysDiskUsePercent") { return SysDiskUsePercent; } else if (InfoKey == "DiskUsePercent") { return DiskUsePercent; } else { return -1; } } } catch (Exception ex) { Console.WriteLine(ex.Message); Log.WriteLog(ex.Message); return -1; } } } }