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();
            }


        }

    }

  • 相关阅读:
    对MVC模型的自悟,详尽解释,为了更多非计算机人员可以理解
    openSUSE leap 42.3 实现有线 无线同时用
    Fedora27 源配置
    Ubuntu16.04添加HP Laserjet Pro M128fn打印机和驱动
    openSUSE leap 42.3 添加HP Laserjet Pro M128fn打印机和驱动
    OpenSUSE Leap 42.3下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    OpenSUSE Leap 42.3 安装java(Oracle jre)
    linux下支持托盘的邮件客户端Sylpheed
    Ubuntu下通过Firefox Opera Chromium浏览器直接执行java应用程序(打开java jnlp文件)实现在服务器远程虚拟控制台完成远程管理的方法
    Firefox 浏览器添加Linux jre插件
  • 原文地址:https://www.cnblogs.com/yahle/p/846115.html
Copyright © 2011-2022 走看看