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毫秒。