
ExecuteTimeusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace TestProject1.Performance
{
public static class ExecuteTime
{
#region SetOut
private static TextWriter _out;
public static TextWriter Out
{
get
{
if (_out == null)
{
SetOut(Console.Out);
}
return _out;
}
}
public static void SetOut(TextWriter newOut)
{
if (newOut == null)
{
throw new ArgumentNullException("newOut");
}
_out = newOut;
}
#endregion
#region Enable
static bool? _Enable;
/// <summary>
/// 是否启用
/// </summary>
public static bool Enable
{
get
{
if (_Enable != null)
return _Enable.Value;
_Enable = false;
#if DEBUG
_Enable = true;
#endif
return _Enable.Value;
}
set
{
_Enable = value;
}
}
#endregion
#region TabIndex
static int tabIndex;
/// <summary>
/// Tab计数器
/// </summary>
internal static int TabIndex
{
get
{
return tabIndex;
}
set
{
if (value < 0)
tabIndex = 0;
else
tabIndex = value;
}
}
#endregion
static string ToPreTab(string content)
{
for (int i = 0; i < TabIndex; i++)
{
content = "\t" + content;
}
return content;
}
public static void WriteLine(string content)
{
Out.WriteLine(TabIndex.ToString() + ToPreTab(content));
}
}
}

ExecuteTimeItemusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
namespace TestProject1.Performance
{
public class ExecuteTimeItem : IDisposable
{
Stopwatch sw = new Stopwatch();
object content;
internal ExecuteTimeItem(object content)
{
ExecuteTime.TabIndex++;
ExecuteTime.WriteLine(string.Format("开始【{0}】", content));
this.content = content;
sw.Start();
}
#region IDisposable 成员
bool disposed = false;
public void Dispose()
{
Dispose(true);
}
public void Dispose(bool disposed)
{
if (!this.disposed)
{
sw.Stop();
ExecuteTime.WriteLine(string.Format("结束【{0}】用时:{1}毫秒。", content, sw.Elapsed.TotalMilliseconds));
ExecuteTime.TabIndex--;
disposed = true;
}
}
#endregion
}
}

Test [TestMethod]
public void TestMethod1()
{
for (int i = 0; i < 10; i++)
{
using (new ExecuteTimeItem(i))
{
Thread.Sleep(10);
for (int j = 0; j < 10; j++)
{
using (new ExecuteTimeItem(j))
{
Thread.Sleep(20);
}
}
}
}
}

结果1 开始【0】
2 开始【0】
2 结束【0】用时:20.4351毫秒。
2 开始【1】
2 结束【1】用时:19.4521毫秒。
2 开始【2】
2 结束【2】用时:19.9381毫秒。
2 开始【3】
2 结束【3】用时:19.9483毫秒。
2 开始【4】
2 结束【4】用时:19.9731毫秒。
2 开始【5】
2 结束【5】用时:19.9782毫秒。
2 开始【6】
2 结束【6】用时:20.0924毫秒。
2 开始【7】
2 结束【7】用时:19.8172毫秒。
2 开始【8】
2 结束【8】用时:19.9806毫秒。
2 开始【9】
2 结束【9】用时:19.9507毫秒。
1 结束【0】用时:210.6243毫秒。
1 开始【1】
2 开始【0】
2 结束【0】用时:19.9719毫秒。
2 开始【1】
2 结束【1】用时:20.0503毫秒。
2 开始【2】
2 结束【2】用时:20.3831毫秒。
2 开始【3】
2 结束【3】用时:19.4919毫秒。
2 开始【4】
2 结束【4】用时:20.068毫秒。
2 开始【5】
2 结束【5】用时:19.8372毫秒。
2 开始【6】
2 结束【6】用时:19.9735毫秒。
2 开始【7】
2 结束【7】用时:19.9735毫秒。
2 开始【8】
2 结束【8】用时:19.9609毫秒。
2 开始【9】
2 结束【9】用时:19.9688毫秒。
1 结束【1】用时:209.9757毫秒。
1 开始【2】
2 开始【0】
2 结束【0】用时:19.9991毫秒。
2 开始【1】
2 结束【1】用时:19.9814毫秒。
2 开始【2】
2 结束【2】用时:19.977毫秒。
2 开始【3】
2 结束【3】用时:19.9444毫秒。
2 开始【4】
2 结束【4】用时:19.9767毫秒。
2 开始【5】
2 结束【5】用时:19.9676毫秒。
2 开始【6】
2 结束【6】用时:20.3405毫秒。
2 开始【7】
2 结束【7】用时:19.6065毫秒。
2 开始【8】
2 结束【8】用时:19.9841毫秒。
2 开始【9】
2 结束【9】用时:19.927毫秒。
1 结束【2】用时:210.0064毫秒。
1 开始【3】
2 开始【0】
2 结束【0】用时:19.9767毫秒。
2 开始【1】
2 结束【1】用时:19.9881毫秒。
2 开始【2】
2 结束【2】用时:19.9558毫秒。
2 开始【3】
2 结束【3】用时:19.9684毫秒。
2 开始【4】
2 结束【4】用时:20.2941毫秒。
2 开始【5】
2 结束【5】用时:19.6356毫秒。
2 开始【6】
2 结束【6】用时:19.9668毫秒。
2 开始【7】
2 结束【7】用时:19.9877毫秒。
2 开始【8】
2 结束【8】用时:19.9735毫秒。
2 开始【9】
2 结束【9】用时:19.9924毫秒。
1 结束【3】用时:210.0265毫秒。
1 开始【4】
2 开始【0】
2 结束【0】用时:20.0034毫秒。
2 开始【1】
2 结束【1】用时:19.9928毫秒。
2 开始【2】
2 结束【2】用时:19.9463毫秒。
2 开始【3】
2 结束【3】用时:19.9656毫秒。
2 开始【4】
2 结束【4】用时:19.9664毫秒。
2 开始【5】
2 结束【5】用时:19.9782毫秒。
2 开始【6】
2 结束【6】用时:19.9684毫秒。
2 开始【7】
2 结束【7】用时:19.964毫秒。
2 开始【8】
2 结束【8】用时:20.0117毫秒。
2 开始【9】
2 结束【9】用时:19.9227毫秒。
1 结束【4】用时:209.9635毫秒。
1 开始【5】
2 开始【0】
2 结束【0】用时:19.9979毫秒。
2 开始【1】
2 结束【1】用时:20.0231毫秒。
2 开始【2】
2 结束【2】用时:19.9353毫秒。
2 开始【3】
2 结束【3】用时:19.9495毫秒。
2 开始【4】
2 结束【4】用时:19.9688毫秒。
2 开始【5】
2 结束【5】用时:20.1204毫秒。
2 开始【6】
2 结束【6】用时:19.8148毫秒。
2 开始【7】
2 结束【7】用时:19.9924毫秒。
2 开始【8】
2 结束【8】用时:19.9621毫秒。
2 开始【9】
2 结束【9】用时:19.9526毫秒。
1 结束【5】用时:210.006毫秒。
1 开始【6】
2 开始【0】
2 结束【0】用时:19.9798毫秒。
2 开始【1】
2 结束【1】用时:19.9613毫秒。
2 开始【2】
2 结束【2】用时:19.9774毫秒。
2 开始【3】
2 结束【3】用时:20.0255毫秒。
2 开始【4】
2 结束【4】用时:19.8664毫秒。
2 开始【5】
2 结束【5】用时:19.9794毫秒。
2 开始【6】
2 结束【6】用时:19.9495毫秒。
2 开始【7】
2 结束【7】用时:20.0361毫秒。
2 开始【8】
2 结束【8】用时:19.914毫秒。
2 开始【9】
2 结束【9】用时:20.3673毫秒。
1 结束【6】用时:210.4049毫秒。
1 开始【7】
2 开始【0】
2 结束【0】用时:19.9794毫秒。
2 开始【1】
2 结束【1】用时:19.9774毫秒。
2 开始【2】
2 结束【2】用时:19.9778毫秒。
2 开始【3】
2 结束【3】用时:19.9719毫秒。
2 开始【4】
2 结束【4】用时:19.9676毫秒。
2 开始【5】
2 结束【5】用时:20.0341毫秒。
2 开始【6】
2 结束【6】用时:19.5978毫秒。
2 开始【7】
2 结束【7】用时:19.979毫秒。
2 开始【8】
2 结束【8】用时:19.9487毫秒。
2 开始【9】
2 结束【9】用时:23.1245毫秒。
1 结束【7】用时:212.7541毫秒。
1 开始【8】
2 开始【0】
2 结束【0】用时:19.9983毫秒。
2 开始【1】
2 结束【1】用时:19.9755毫秒。
2 开始【2】
2 结束【2】用时:19.9747毫秒。
2 开始【3】
2 结束【3】用时:19.9936毫秒。
2 开始【4】
2 结束【4】用时:19.9451毫秒。
2 开始【5】
2 结束【5】用时:19.9893毫秒。
2 开始【6】
2 结束【6】用时:19.9526毫秒。
2 开始【7】
2 结束【7】用时:19.8892毫秒。
2 开始【8】
2 结束【8】用时:19.9723毫秒。
2 开始【9】
2 结束【9】用时:19.9743毫秒。
1 结束【8】用时:209.8386毫秒。
1 开始【9】
2 开始【0】
2 结束【0】用时:19.2914毫秒。
2 开始【1】
2 结束【1】用时:19.9704毫秒。
2 开始【2】
2 结束【2】用时:19.9613毫秒。
2 开始【3】
2 结束【3】用时:19.9841毫秒。
2 开始【4】
2 结束【4】用时:20.0731毫秒。
2 开始【5】
2 结束【5】用时:19.8557毫秒。
2 开始【6】
2 结束【6】用时:19.9668毫秒。
2 开始【7】
2 结束【7】用时:19.9546毫秒。
2 开始【8】
2 结束【8】用时:20.0338毫秒。
2 开始【9】
2 结束【9】用时:19.9113毫秒。
1 结束【9】用时:210.0209毫秒。