介绍:

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

使用方法:

            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#的更多相关文章

  1. JavaScript 定义类的最佳写法——完整支持面向对象(封装、继承、多态),兼容所有浏览器,支持用JSDuck生成文档

    作者: zyl910 [TOC] 一.缘由 由于在ES6之前,JavaScript中没有定义类(class)语法.导致大家用各种五花八门的办法来定义类,代码风格不统一.而且对于模拟面向对象的三大支柱& ...

  2. 【C++札记】类的分离式写法

    介绍 类的分离式写法,使得代码更加规范,增强了阅读性. 分离式写法的规则: 1.类的变量:写在类的里面 2.成员函数:类中写函数的声明,函数的定义写在类体外. 3.写在类外函数定义时,类名前加限定(O ...

  3. 谈谈Delphi中的类和对象4---类是一种对数据和操作高度的封装机制 && 类是一种代码重用机制

    五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; publ ...

  4. [置顶] NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析--吐血放送

    NS2中对TCP数据包和ACK包的TCP Sink类的主要实现代码详尽剖析,限于个人水平,如有错误请留言指出! TcpSink类的recv()方法: void TcpSink::recv(Packet ...

  5. 2017/2/16:自己ajax+json习惯性写法 代码拼接的写法 +json用post提交乱码的原因

    1.先导入jquery的包 2.ajax的写法跟注意点 返回一个list的写法 代码拼接写法: html层: 2.script处 4:在你前面传递参数的时候没有遇到乱码问题的情况下,你使用json并且 ...

  6. C++ //多态案例 -计算器类(普通写法 和 多态写法) //利用多态实现计算器 //多态好处: //1.组织结构清晰 //2.可读性强 //3.对于前期和后期扩展以及维护性高

    1 //多态案例 -计算器类(普通写法 和 多态写法) 2 3 #include <iostream> 4 #include <string> 5 using namespac ...

  7. 编写Java程序,观察类启动时静态代码块和main()的执行顺序

    返回本章节 返回作业目录 需求说明: 观察类启动时静态代码块和main()的执行顺序 在Book类中定义静态代码块. 在Book中分别定义一个普通实例方法和静态方法. 在Book类的静态代码块中调用静 ...

  8. Go项目的测试代码3(测试替身Test Double)

    上一篇文章介绍了项目中测试代码的写法. Go项目的测试代码2(项目运用) 这里简单的共享一下测试替身. 当我们写测试代码的时候,经常遇到一个问题.跟别的模块或服务有依赖性,可是功能还没开发完.或是因为 ...

  9. Web端PHP代码函数覆盖率测试解决方案

    1. 关于代码覆盖率 衡量代码覆盖率有很多种层次,比如行覆盖率,函数/方法覆盖率,类覆盖率,分支覆盖率等等.代码覆盖率也是衡量测试质量的一个重要标准,对于黑盒测试来说,如果你不确定自己的测试用例是否真 ...

随机推荐

  1. 使用Enitity Framework实现增删改查服务中的一些通用思路

    添加 → 方法参数中有一个有关添加视图模型类型的形参,比如vm→ 根据vm的某个属性,比如Name判断在上下文中是否存在,如果不存在就抛EntityNotFoundException异常→ 判断vm所 ...

  2. zz c++ Useful resources

    Useful resources < cpp The Standard C++ Foundation - Non-profit hub for C++ news, articles, and e ...

  3. GEMR: Get the parent window for view

    Window window = Utilities.GetVisualParent<Window>(this); if (window != null) { window.DialogRe ...

  4. Mac Jenkins 权限问题

    在官网下载dmg安装包,安装完毕即可在本机搭建jenkins的工作.但是jenkins不会用本地的用户去构建,任何创建的文件都是“jenkins”用户所有,这会造成很多权限问题,无法调用自己写的脚本, ...

  5. 网站CSS选择器性能讨论

    CSS选择符由一些初始化参数组成,这些参数指明了要应用这个CSS规则的页面元素.作为一个网站的前端开发工程师,应该避免编写一些常见的开销很大的CSS选择符模式,尽量编写高效的CSS选择符,从而加快页面 ...

  6. Spark源码系列(八)Spark Streaming实例分析

    这一章要讲Spark Streaming,讲之前首先回顾下它的用法,具体用法请参照<Spark Streaming编程指南>. Example代码分析 val ssc = )); // 获 ...

  7. java匿名类

    一般情况下,我们需要声明一个类去继承一个接口,然后再new这个类,赋值给接口.但有时后这个类只会被调用一次,为了调用方便,那么就可以用匿名类来简化这个步骤. interface IKey{ void ...

  8. ASP - MSXML2.ServerXMLHTTP & HTTPS & 证书过期 — msxml3.dll '80072f05'

    Error: msxml3.dll  '80072f05' The date in the certificate is invalid or has expired Dim xmlhttp Set ...

  9. Gradle 脚本剪片---copy

    Gradle是以Groovy语言为基础,基于DSL语法的自动化构建工具,一个构建脚本能够包含任何Groovy语言元素,每个脚本都是UTF-8编码的文件. 6-1 Project对象API 前面我们说过 ...

  10. C#基础课程之六(临时表)DataTable使用方法

    DataTable 用法:赋取值操作,及报错情况 dataTable.Columns.Add("Name"); //Columns 对象获取该集合的全部列,添加列名. 默认stri ...