• MethodPerformanceMonitor


            /// <summary>
            /// System.Security.SecurityElement.Escape();
            /// </summary>
            /// <param name="xml"></param>
            /// <returns></returns>
            public static string GetSafeXml(string xml)
            {
                //s = <You're angle & evil>, ['&<>]
                return Regex.Replace(xml, "'|&|<|>", m =>
                {
                    switch (m.Value)
                    {
                        case "'":
                            return "&apos";
                        case "&":
                            return "&amp";
                        case "<":
                            return "&lt";
                        case ">":
                            return "&gt";
                        default:
                            return string.Empty;
                    }
                });
            }
    

      

    #define PerfMonitor
    //#undef PerfMonitor
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Diagnostics;
    using System.Threading;
    
    namespace Rocky.Caching
    {
        public sealed class MethodPerformanceMonitor : MarshalByRefObject
        {
            #region StaticMembers
            public const string CompilerSymbal = "PerfMonitor";
            #endregion
    
            #region Fields
            private Stopwatch _watch;
            private string _signature;
            private long _execTimes;
            private long _totalRunTicks;
            private long _hitTimes;
            private long _totalHitRunTicks;
            #endregion
    
            #region Properties
            public bool IsEnabled
            {
                get { return _watch != null; }
            }
            /// <summary>
            /// 方法签名
            /// </summary>
            public string Signature
            {
                get { return _signature; }
            }
            public long ExecuteTimes
            {
                get { return _execTimes; }
            }
            public TimeSpan TotalRunTime
            {
                get { return TimeSpan.FromTicks(_totalRunTicks); }
            }
            public TimeSpan AverageRunTime
            {
                get { return TimeSpan.FromTicks(_totalRunTicks / _execTimes); }
            }
            /// <summary>
            /// 命中率
            /// </summary>
            public double HitRate
            {
                get { return (double)_hitTimes / (double)_execTimes; }
            }
            /// <summary>
            /// 命中时的总执行时间
            /// </summary>
            public TimeSpan TotalHitRunTime
            {
                get { return TimeSpan.FromTicks(_totalHitRunTicks); }
            }
            /// <summary>
            /// 命中时的平均执行时间
            /// </summary>
            public TimeSpan AverageHitRunTime
            {
                get { return TimeSpan.FromTicks((long)((double)_totalHitRunTicks / (double)_hitTimes)); }
            }
            #endregion
    
            #region Methods
            public MethodPerformanceMonitor(string signature)
            {
                _signature = signature;
    #if PerfMonitor
                _watch = new Stopwatch();
    #endif
            }
    
            /// <summary>
            /// 方法try{}语块开始前调用
            /// </summary>
            [Conditional(CompilerSymbal)]
            public void EnterMethod()
            {
                _watch.Start();
            }
    
            /// <summary>
            /// 方法finally{}语块结束前调用
            /// </summary>
            [Conditional(CompilerSymbal)]
            public void ExitMethod(bool isHitCache = false)
            {
                long elapsedTicks = _watch.ElapsedTicks;
                _watch.Reset();
                Interlocked.Add(ref _totalRunTicks, elapsedTicks);
                Interlocked.Increment(ref _execTimes);
                if (isHitCache)
                {
                    Interlocked.Add(ref _totalHitRunTicks, elapsedTicks);
                    Interlocked.Increment(ref _hitTimes);
                }
            }
            #endregion
        }
    }
  • 相关阅读:
    Servlet编程实例1
    Servlet
    JDBC之代码优化
    JDBC数据库编程
    数据库常识
    数据库基本操作
    STM32CUBEMX入门学习笔记3:HAL库以及STM32CUBE相关资料
    QT入门学习笔记2:QT例程
    爬虫制作入门学习笔记2:[转]python爬虫实例项目大全
    中移物联网onenet入门学习笔记2:中移物联的通信格式
  • 原文地址:https://www.cnblogs.com/Googler/p/2975228.html
Copyright © 2020-2023  润新知