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