標籤:
介紹:
可以很方便的在代碼裡迴圈執行 需要測試的函數 自動統計出執行時間,支援多線程。
使用方法:
PerformanceTest p = new PerformanceTest(); p.SetCount(10);//迴圈次數(預設:1) p.SetIsMultithread(true);//是否啟動多線程測試 (預設:false) p.Execute( i => { //需要測試的代碼 Response.Write(i+"<br>"); System.Threading.Thread.Sleep(1000); }, message => { //輸出總共已耗用時間 Response.Write(message); //總共執行時間:1.02206秒 } );
源碼:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading;namespace SyntacticSugar{ /// <summary> /// ** 描述:程式效能測試類 /// ** 創始時間:2015-5-30 /// ** 修改時間:- /// ** 修改人:sunkaixuan /// ** 使用說明:tml /// </summary> public class PerformanceTest { private DateTime BeginTime; private DateTime EndTime; private ParamsModel Params; /// <summary> ///設定執行次數(預設:1) /// </summary> public void SetCount(int count) { Params.RunCount = count; } /// <summary> /// 設定線程模式(預設:false) /// </summary> /// <param name="isMul">true為多線程</param> public void SetIsMultithread(bool isMul) { Params.IsMultithread = isMul; } /// <summary> /// 建構函式 /// </summary> public PerformanceTest() { Params = new ParamsModel() { RunCount = 1 }; } /// <summary> /// 執行函數 /// </summary> /// <param name="action"></param> public void Execute(Action<int> action, Action<string> rollBack) { List<Thread> arr = new List<Thread>(); BeginTime = DateTime.Now; for (int i = 0; i < Params.RunCount; i++) { if (Params.IsMultithread) { var thread = new Thread(new System.Threading.ThreadStart(() => { action(i); })); thread.Start(); arr.Add(thread); } else { action(i); } } if (Params.IsMultithread) { foreach (Thread t in arr) { while (t.IsAlive) { Thread.Sleep(10); } } } rollBack(GetResult()); } public string GetResult() { EndTime = DateTime.Now; string totalTime = ((EndTime - BeginTime).TotalMilliseconds / 1000.0).ToString("n5"); string reval = string.Format("總共執行時間:{0}秒", totalTime); Console.Write(reval); return reval; } private class ParamsModel { public int RunCount { get; set; } public bool IsMultithread { get; set; } } }}
效能測試類,讓你寫法代碼養成經常測試的好習慣 -ASP.NET C#