利用windows性能计数器进行服务器性能监控示例分享
利用windows性能计数器进行服务器性能监控示例分享
发布时间:2016-12-28 来源:查字典编辑
摘要:复制代码代码如下:usingSystem;usingSystem.Collections.Generic;usingSystem.Text;...

复制代码 代码如下:

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;

}

}

}

}

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新C#教程学习
热门C#教程学习
编程开发子分类