C#代碼性能測(cè)試類(簡(jiǎn)單實(shí)用)
介紹:
可以很方便的在代碼里循環(huán)執(zhí)行 需要測(cè)試的函數(shù) 自動(dòng)統(tǒng)計(jì)出執(zhí)行時(shí)間,支持多線程。
使用方法:
PerformanceTest p = new PerformanceTest();
p.SetCount(10);//循環(huán)次數(shù)(默認(rèn):1)
p.SetIsMultithread(true);//是否啟動(dòng)多線程測(cè)試 (默認(rèn):false)
p.Execute(
i =>
{
//需要測(cè)試的代碼
Response.Write(i+"<br>");
System.Threading.Thread.Sleep(1000);
},
message =>
{
//輸出總共運(yùn)行時(shí)間
Response.Write(message); //總共執(zhí)行時(shí)間:1.02206秒
}
);
源碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace SyntacticSugar
{
/// <summary>
/// ** 描述:程序性能測(cè)試類
/// ** 創(chuàng)始時(shí)間:2015-5-30
/// ** 修改時(shí)間:-
/// ** 修改人:sunkaixuan
/// ** 使用說(shuō)明:tml
/// </summary>
public class PerformanceTest
{
private DateTime BeginTime;
private DateTime EndTime;
private ParamsModel Params;
/// <summary>
///設(shè)置執(zhí)行次數(shù)(默認(rèn):1)
/// </summary>
public void SetCount(int count)
{
Params.RunCount = count;
}
/// <summary>
/// 設(shè)置線程模式(默認(rèn):false)
/// </summary>
/// <param name="isMul">true為多線程</param>
public void SetIsMultithread(bool isMul)
{
Params.IsMultithread = isMul;
}
/// <summary>
/// 構(gòu)造函數(shù)
/// </summary>
public PerformanceTest()
{
Params = new ParamsModel()
{
RunCount = 1
};
}
/// <summary>
/// 執(zhí)行函數(shù)
/// </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("總共執(zhí)行時(shí)間:{0}秒", totalTime);
Console.Write(reval);
return reval;
}
private class ParamsModel
{
public int RunCount { get; set; }
public bool IsMultithread { get; set; }
}
}
}
- 使用 BenchmarkDotNet 對(duì) C# 代碼進(jìn)行基準(zhǔn)測(cè)試
- C#建立測(cè)試用例系統(tǒng)的示例代碼
- 關(guān)于Unity C# Mathf.Abs()取絕對(duì)值性能測(cè)試詳解
- C#使用base64對(duì)字符串進(jìn)行編碼和解碼的測(cè)試
- C#使用String和StringBuilder運(yùn)行速度測(cè)試及各自常用方法簡(jiǎn)介
- 詳解C# WebApi 接口測(cè)試工具:WebApiTestClient
- c# 插入數(shù)據(jù)效率測(cè)試(mongodb)
- 京東聯(lián)盟C#接口測(cè)試示例分享
- C#/.Net 中快速批量給SQLite數(shù)據(jù)庫(kù)插入測(cè)試數(shù)據(jù)
- C#控制臺(tái)下測(cè)試多線程的方法
- c#測(cè)試反射性能示例
- c#測(cè)試本機(jī)sql運(yùn)算速度的代碼示例分享
- C# 單元測(cè)試全解析
相關(guān)文章
winform 實(shí)現(xiàn)選擇文件和選擇文件夾對(duì)話框的簡(jiǎn)單實(shí)例
下面小編就為大家?guī)?lái)一篇winform 實(shí)現(xiàn)選擇文件和選擇文件夾對(duì)話框的簡(jiǎn)單實(shí)例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-01-01
C#中txt數(shù)據(jù)寫入的幾種常見(jiàn)方法
這篇文章主要給大家介紹了關(guān)于C#中txt數(shù)據(jù)寫入的幾種常見(jiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
C# winform編程中響應(yīng)回車鍵的實(shí)現(xiàn)代碼
這篇文章主要介紹了C# winform編程中響應(yīng)回車鍵的實(shí)現(xiàn)代碼,既在窗口上響應(yīng)回車鍵事件的方法,需要的朋友可以參考下2014-08-08
C#去掉字符串中所有匹配的字符String.Replace方法
在C#中,如果你想要去掉字符串中所有匹配的字符,你可以使用String.Replace方法,本文主要介紹了C#去掉字符串中所有匹配的字符String.Replace方法,具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04
詳解DataGridView控件的數(shù)據(jù)綁定
本文詳細(xì)講解了DataGridView控件的數(shù)據(jù)綁定,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
C#中利用Lotus notes公共郵箱發(fā)送郵件的方法
這篇文章主要給大家介紹了關(guān)于C#中利用Lotus notes公共郵箱發(fā)送郵件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2018-02-02
C# 設(shè)置防火墻的創(chuàng)建規(guī)則
這篇文章主要介紹了C# 設(shè)置防火墻的創(chuàng)建規(guī)則,幫助大家更好的利用c#操作防火墻,感興趣的朋友可以了解下2020-11-11
C#獲取局域網(wǎng)MAC地址的簡(jiǎn)單實(shí)例
這篇文章主要介紹了C#獲取局域網(wǎng)MAC地址的簡(jiǎn)單實(shí)例,有需要的朋友可以參考一下2013-11-11

