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


        }

    }

  • 相关阅读:
    VSCode settings.json的配置样例
    用css让div高度自动撑满屏幕
    C# 后端接受前端上传的文件
    netcode 控制台项目生成exe文件
    C# UDP发送和接收
    C# 直播录制视频
    Vs2017 FrameWork EF Mysql Mvc 三层整合1
    Vs2017 FrameWork EF Mysql 控制台应用
    Vs2017 NetCode EF Mysql 控制台应用
    Vs2017 NetCode Mvc EF Mysql 整合2
  • 原文地址:https://www.cnblogs.com/yahle/p/846115.html
Copyright © 2011-2022 走看看