代码运行计时类

    今天想找一下程序执行时间的类,在网上搜了一下,看到有位朋友 hbb0b0 的一篇文章可以很方便的计算执行时间(地址:http://www.cnblogs.com/hbb0b0/archive/2009/05/30/1491808.html

 

代码如下:

 

OperationTimer
 1     public class OperationTimer : IDisposable
 2     {        
 3         private Int64 m_startTime;
 4         private string m_text;
 5         private Int32 m_CollectionCount;
 6 
 7         public OperationTimer(string text)
 8         {
 9             m_startTime = Stopwatch.GetTimestamp();
10             m_text = text;
11         }
12 
13         public void Dispose()
14         {
15             string text = string.Format("Time={0,6:###.00}", (Stopwatch.GetTimestamp() - m_startTime) / Stopwatch.Frequency);
16             Console.WriteLine(string.Format("{0}:{1}", m_text, text));
17         }
18     }
 

 

 

试了一下果然很好用。程序很简单,就是在一个类继承自IDisposable接口的类的构造函数中记录下开始时间,在销毁时计算一下时间差,就可得到相应的执行时间。使用也很巧妙,直接 using (OperationTimer op=new OperationTimer ("Generic ")){...} ,很爽很简洁的实现了想要的功能。
 
    不过有个小情况,就是本人平时时 asp.net 下写的代码,如果每次都拿到控制台中运行,不太方便,如果能改造一下,让这个类既能在控制台下运行也可以在asp.net 的环境下方便使用就好了。
 
    看了一下这个类的实现原理,由于是在类被销毁时才计算运行时间差,没有更多的空间可以去获取这个时间。似乎只有搞一个委托,让程序要以在销毁时执行,把这个时间传递需要的地方。呵呵,写了这么久的程序,也看了很多次的委托,因为实际中基本没有用上过,所以对写法不太熟,正好重温一下。下面是改造过程。
 
  第一步:将这个类按自己习贯的方式修改一下命名,并为了能简单调用,增加了一个构造函数,代码如下:
代码
    /// <summary>
    
/// 计算执行时间的类
    
/// 原文 //http://www.cnblogs.com/hbb0b0/archive/2009/05/30/1491808.html/
    
/// 修改:增加了委托方法
    
/// 时间:2009-12-8
    
/// </summary>

    
class CodeTimer : IDisposable
    {
        
private Int64 _StartTime;
        
private string _Text;

        
public CodeTimer()
            : 
this("CodeTimer")
        {
        }
        
public CodeTimer(string text)
        {
            _StartTime 
= Stopwatch.GetTimestamp();
            _Text 
= text;
        }
        
public void Dispose()
        {
            Int64 _runTime 
= (Stopwatch.GetTimestamp() - _StartTime) / Stopwatch.Frequency;//返回时间 秒
            
string text = string.Format("Time={0,6:###.00}", _runTime);
            Console.WriteLine(
string.Format("{0}:{1}", _Text, text));
        }
    }

 

第二步:增加一个 public delegate void OnCompletedEventHandle(Int64 RunTime); 的委托,用以把程序执行时的运行时间传递出来

 

第三步:增加一个事件,以便在程序运行完了后执行 代码如下:public event OnCompletedEventHandle OnCompleted;

 

第四步:在销毁时判断是否有事件的委托,有则调用。代码如下:

      if (OnCompleted != null)
                OnCompleted.Invoke(_runTime);

这样就行了,以后你在使用时只需要加上句完成后的事件就可以把执行时间。如:

 

         
         
using (CodeTimer ct = new CodeTimer())
            {
                ct.OnCompleted 
+= new CodeTimer.OnCompletedEventHandle(ShowTime);

                .....
            }

 

 

第五步,你就可以在以下代码中为所欲为了

 

 

    static void ShowTime(Int64 runtime)
        {
            Console.WriteLine(
string.Format("RunTime:{0,6:###.00}s", runtime));
        }

 

 

这样就可以把想要的数据传递出来了。OK了,加入到自己的常用类中,以后就可以直接使用了。

 

写到这里想起了之前在asp.net 中写的一个计算整个页面执行时间(服务器端+客户端执行时间)的方法,时间不早了,吃饭先,下次接着写.

 

 示例代码:/Files/l6098627/RunTimeDemo.rar

 

posted @ 2009-12-08 12:18  Jun@似水流年  阅读(569)  评论(0编辑  收藏  举报