性能测试类,让你写法代码养成经常测试的好习惯 -ASP.NET C#

介绍:

可以很方便的在代码里循环执行 需要测试的函数  自动统计出执行时间,支持多线程。

使用方法:

            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; }
}
}
}

  

上一篇:es-06-java创建mapping和setting


下一篇:java并发库--锁