/// <summary>
/// CLR Version: 2.0.50727.5448
/// NameSpace: Performence.Impl
/// FileName: PerformenceCounter
///
/// Created at 2014/03/18 10:23:38
/// </summary>
public class PerformenceCounter
{
#region fields
private static readonly PerformenceCounter _current = new PerformenceCounter();
private static readonly IDictionary<string, PerformanceCounter> PerfCounters = new Dictionary<string, PerformanceCounter>();
private const string CategoryName = "PerformenceCounter.Service.Search";
private const string SendPerSecond = "send/sec";
private const string SendTotal = "send total";
private const string SendFailedPerSecond = "failed/sec";
private const string SendFailedTotal = "failed total";
private const string ExceptionPerSecond = "error/sec";
private const string ExcerptionTotal = "error total";
private const string CacheHitPerSecond = "cache hit/sec";
private const string CacheHitTotal = "cache hit total";
private const string CacheFailedTotal = "cache failed total";
#endregion
#region .ctor
#endregion
#region properties
public static PerformenceCounter Current
{
get { return _current; }
}
#endregion
#region methods
private void IncremnetPerCounter(string perfCounterName)
{
GetPerformanceCounter(perfCounterName).Increment();
}
private PerformanceCounter GetPerformanceCounter(string perfCounterName)
{
return PerfCounters[perfCounterName];
}
/// <summary>
/// 创建计数器
/// </summary>
private void CreateCounters()
{
// 检查性能计数器是否存在
Clear();
CounterCreationDataCollection counterCollection = new CounterCreationDataCollection();
CounterCreationData ccd1 = new CounterCreationData(SendPerSecond, "每秒发送数", PerformanceCounterType.RateOfCountsPerSecond64);
counterCollection.Add(ccd1);
CounterCreationData ccd2 = new CounterCreationData(SendTotal, "发送总数", PerformanceCounterType.NumberOfItems64);
counterCollection.Add(ccd2);
CounterCreationData ccd3 = new CounterCreationData(SendFailedPerSecond, "每秒发送失败数", PerformanceCounterType.RateOfCountsPerSecond64);
counterCollection.Add(ccd3);
CounterCreationData ccd4 = new CounterCreationData(SendFailedTotal, "发送失败总数", PerformanceCounterType.NumberOfItems64);
counterCollection.Add(ccd4);
CounterCreationData ccd5 = new CounterCreationData(ExceptionPerSecond, "每秒错误数(发送后超时或者异常数)", PerformanceCounterType.RateOfCountsPerSecond64);
counterCollection.Add(ccd5);
CounterCreationData ccd6 = new CounterCreationData(ExcerptionTotal, "错误总数(发送后超时或者异常数)", PerformanceCounterType.NumberOfItems64);
counterCollection.Add(ccd6);
CounterCreationData ccd7 = new CounterCreationData(CacheHitPerSecond, "每秒缓存命中数", PerformanceCounterType.RateOfCountsPerSecond64);
counterCollection.Add(ccd7);
CounterCreationData ccd8 = new CounterCreationData(CacheHitTotal, "缓存命中总数", PerformanceCounterType.NumberOfItems64);
counterCollection.Add(ccd8);
CounterCreationData ccd9 = new CounterCreationData(CacheFailedTotal, "缓存失效总数", PerformanceCounterType.NumberOfItems64);
counterCollection.Add(ccd9);
PerformanceCounterCategory.Create(CategoryName, "PerformanceCounter.Service.Search 发送计数器", PerformanceCounterCategoryType.SingleInstance, counterCollection);
}
public void Initiailize()
{
//创建计数器
CreateCounters();
// 添加到缓存中
PerfCounters.Add(SendPerSecond, new PerformanceCounter(CategoryName, SendPerSecond, false));
PerfCounters.Add(SendTotal, new PerformanceCounter(CategoryName, SendTotal, false));
PerfCounters.Add(SendFailedPerSecond, new PerformanceCounter(CategoryName, SendFailedPerSecond, false));
PerfCounters.Add(SendFailedTotal, new PerformanceCounter(CategoryName, SendFailedTotal, false));
PerfCounters.Add(ExceptionPerSecond, new PerformanceCounter(CategoryName, ExceptionPerSecond, false));
PerfCounters.Add(ExcerptionTotal, new PerformanceCounter(CategoryName, ExcerptionTotal, false));
PerfCounters.Add(CacheHitPerSecond, new PerformanceCounter(CategoryName, CacheHitPerSecond, false));
PerfCounters.Add(CacheHitTotal, new PerformanceCounter(CategoryName, CacheHitTotal, false));
}
/// <summary>
/// 清理性能计数器
/// </summary>
public void Clear()
{
if (PerformanceCounterCategory.Exists(CategoryName))
{
PerformanceCounterCategory.Delete(CategoryName);
}
}
/// <summary>
/// 发送计数
/// </summary>
public void IncrementSendTotal()
{
IncremnetPerCounter(SendTotal);
IncremnetPerCounter(SendPerSecond);
}
/// <summary>
/// 失败计数
/// </summary>
public void IncrementSendFaildTotal()
{
IncremnetPerCounter(SendFailedTotal);
IncremnetPerCounter(SendFailedPerSecond);
}
/// <summary>
/// 异常计数
/// </summary>
public void IncrementExcetionTotal()
{
IncremnetPerCounter(ExcerptionTotal);
IncremnetPerCounter(ExceptionPerSecond);
}
/// <summary>
/// 缓存命中计数
/// </summary>
public void IncrementCacheHitTotal()
{
IncremnetPerCounter(CacheHitTotal);
IncremnetPerCounter(CacheHitPerSecond);
}
/// <summary>
/// 缓存失效计数
/// </summary>
public void IncrementCacheFaildTotal()
{
IncremnetPerCounter(CacheFailedTotal);
}
#endregion
}
计数器:
PerformenceCounter.Current.Initiailize();
PerformenceCounter.Current.IncrementSendTotal();
PerformenceCounter.Current.IncrementCacheHitTotal();
PerformenceCounter.Current.IncrementCacheFaildTotal();
PerformenceCounter.Current.IncrementSendFaildTotal();
//当没有缓存命中 直接记异常
PerformenceCounter.Current.IncrementExcetionTotal();