用于统计函数执行时间的类是最近在改进程序性能时写的,在函数入口处调用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();
}

}
}
