zoukankan      html  css  js  c++  java
  • 用于统计函数执行时间的类

        用于统计函数执行时间的类是最近在改进程序性能时写的,在函数入口处调用Start,在结束的时候调用Stop,在程序推出前调用Total进行统计输出。
    该类不支持.net 1.1

    using System;
    using System.Data;
    using System.Collections.Generic;
    using System.Diagnostics;
    using System.Text;

    namespace Common
    {
        
    /// <summary>
        
    /// 函数执行时间统计
        
    /// </summary>
        
    /// <example>
        
    /// public void function1()
        
    /// {
        
    ///    QueryTime.Start("function1");
        
    ///    //  处理代码
        
    ///    QueryTime.Stop("function1");
        
    /// }
        
    /// 
        
    /// public void function2()
        
    /// {
        
    ///    QueryTime.Start("function2");
        
    ///    //  处理代码
        
    ///    QueryTime.Stop("function2");
        
    /// }
        
    /// 
        
    /// public void main()
        
    /// {
        
    ///    function1();
        
    ///    function2();
        
    ///    function1();
        
    ///    Console.WriteLine(QueryTime.Total());
        
    /// }
        
    /// 
        
    /// result:
        
    /// function1 Call 2 count, useTime 00:00:01.1234567
        
    /// function2 Call 1 count, useTime 00:00:00.1234567
        
    /// </example>

        public class QueryTime
        
    {      
            
    internal List<TimeSpan> timeSpan = new List<TimeSpan>();
            
    internal Stopwatch watch = new Stopwatch();

            
    public void Start(string key)
            
    {
                QueryTime qt;
                
    if (!map.TryGetValue(key, out qt))
                
    {
                    qt 
    = new QueryTime();
                    map.Add(key, qt);
                }


                qt.watch.Reset();
                qt.watch.Start();
            }


            
    public void Stop(string key)
            
    {
                QueryTime qt 
    = map[key];
                qt.watch.Stop();
                qt.timeSpan.Add(qt.watch.Elapsed);
            }


            
    public void Reset(string key)
            
    {
                QueryTime qt 
    = map[key];
                qt.watch.Stop();
                qt.watch.Reset();
            }


            Dictionary
    <string, QueryTime> map = new Dictionary<string, QueryTime>();

            
    public string Total()
            
    {
                StringBuilder builder 
    = new StringBuilder();
                
    foreach (string key in map.Keys)
                
    {
                    QueryTime qt 
    = map[key];
                    TimeSpan total 
    = new TimeSpan();
                    
    foreach (TimeSpan ts in qt.timeSpan)
                    
    {
                        total 
    = total.Add(ts);
                    }

                    builder.AppendFormat(
    "{0} Call {1} count, useTime {2}\r\n ", key, qt.timeSpan.Count, total);
                }


                
    return builder.ToString();
            }


        }

    }

  • 相关阅读:
    NHibernate之(12):初探延迟加载机制
    NHibernate之(11):探索多对多关系及其关联查询
    NHibernate之(10):探索父子(一对多)关联查询
    NHibernate之(9):探索父子关系(一对多关系)
    NHibernate之(8):巧用组件之依赖对象
    NHibernate之(7):初探NHibernate中的并发控制
    NHibernate之(5):探索Insert, Update, Delete操作
    NHibernate之(6):探索NHibernate中的事务
    NHibernate之(4):探索查询之条件查询(Criteria Query)
    读写文件
  • 原文地址:https://www.cnblogs.com/yahle/p/846115.html
Copyright © 2011-2022 走看看