性能测试类,让你写法代码养成经常测试的好习惯 -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; }
}
}
}
性能测试类,让你写法代码养成经常测试的好习惯 -ASP.NET C#的更多相关文章
- JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档
作者: zyl910 [TOC] 一.缘由 由于在ES6之前,JavaScript中没有定义类(class)语法.导致大家用各种五花八门的办法来定义类,代码风格不统一.而且对于模拟面向对象的三大支柱& ...
- 【C++札记】类的分离式写法
介绍 类的分离式写法,使得代码更加规范,增强了阅读性. 分离式写法的规则: 1.类的变量:写在类的里面 2.成员函数:类中写函数的声明,函数的定义写在类体外. 3.写在类外函数定义时,类名前加限定(O ...
- 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制
五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...
- [置顶] NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析--吐血放送
NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析,限于个人水平,如有错误请留言指出! TcpSink类的recv()方法: void TcpSink::recv(Packet ...
- 2017/2/16:自己ajax+json习惯性写法 代码拼接的写法 +json用post提交乱码的原因
1.先导入jquery的包 2.ajax的写法跟注意点 返回一个list的写法 代码拼接写法: html层: 2.script处 4:在你前面传递参数的时候没有遇到乱码问题的情况下,你使用json并且 ...
- C++ //多态案例 -计算器类(普通写法 和 多态写法) //利用多态实现计算器 //多态好处: //1.组织结构清晰 //2.可读性强 //3.对于前期和后期扩展以及维护性高
1 //多态案例 -计算器类(普通写法 和 多态写法) 2 3 #include <iostream> 4 #include <string> 5 using namespac ...
- 编写Java程序,观察类启动时静态代码块和main()的执行顺序
返回本章节 返回作业目录 需求说明: 观察类启动时静态代码块和main()的执行顺序 在Book类中定义静态代码块. 在Book中分别定义一个普通实例方法和静态方法. 在Book类的静态代码块中调用静 ...
- Go项目的测试代码3(测试替身Test Double)
上一篇文章介绍了项目中测试代码的写法. Go项目的测试代码2(项目运用) 这里简单的共享一下测试替身. 当我们写测试代码的时候,经常遇到一个问题.跟别的模块或服务有依赖性,可是功能还没开发完.或是因为 ...
- Web端PHP代码函数覆盖率测试解决方案
1. 关于代码覆盖率 衡量代码覆盖率有很多种层次,比如行覆盖率,函数/方法覆盖率,类覆盖率,分支覆盖率等等.代码覆盖率也是衡量测试质量的一个重要标准,对于黑盒测试来说,如果你不确定自己的测试用例是否真 ...
随机推荐
- 在Flex (Flash)中嵌入HTML 代码或页面—Flex IFrame
在flex组件中嵌入html代码,可以利用flex iframe.这个在很多时候会用到的,有时候flex必须得这样做,如果你不这样做还真不行-- flex而且可以和html进行JavaScript交互 ...
- GTD时间管理---非行动性
一:行动性和非行动有什么区别? 1:非行动性:指的是收集箱中的信息,是先存储后使用,这些信息平时都处于冬眠状态,只是要用到的时候能够找到它就好了.(偏向于处理生活) 2:行动性: 指的是收集箱中的信息 ...
- mysql中You can’t specify target table for update in FROM clause错误解决方法
mysql中You can't specify target table for update in FROM clause错误的意思是说,不能先select出同一表中的某些值,再update这个表( ...
- 和View Controllers一起工作
在这一课中,你会继续在FoodTracker菜谱的场景工作.你会重新安排现有的UI元素并使用图像采集器添加到照片用户界面.当你完成,你的应用程序将是这个样子: 学习目标 在课程结束时,你将能够: 了解 ...
- webService发布和调用--Axis2
一.工具 1.下载 Axis2以及eclipse的Axis2插件.http://axis.apache.org/axis2/java/core/download.cgi 2.axis2-1.7.1-w ...
- NuGet学习笔记(转)
NuGet学习笔记(1)——初识NuGet及快速安装使用 http://kb.cnblogs.com/page/143190/ 1. NuGet是什么? NuGet is a Visual Studi ...
- Ubuntu server解决不能访问外网问题
Ubuntu server解决不能访问外网问题 在Ubuntu Server上设置访问外网时,需要设置dns,通常是将dns添加到/etc/resolv.conf文件中. 但是将dns添加至/etc/ ...
- 谈"自驱力"
最新说明: 1.标题是为了博眼球取的,请不大家不要纠结具体薪资数字,我瞎取的 2.请注意素质,不要满口喷粪,不要搞人身攻击,尊重别人,就是尊重你自己 3.请大家就事论事,不要胡乱臆想,请站在全局的角度 ...
- RestTemplate 使用总结
场景: 认证服务器需要有个 http client 把前端发来的请求转发到 backend service, 然后把 backend service 的结果再返回给前端,服务器本身只做认证功能. 遇到 ...
- 常用SQL语句备忘录
1.---表中有重复记录用SQL语句查询出来 select * from Recharge where RechargeSerial in (select RechargeSerial from Re ...