介紹:
可以很方便的在代碼里循環執行 需要測試的函數 自動統計出執行時間,支持多線程。
使用方法:
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; } } }}
新聞熱點
疑難解答