性能测试类,让你写法代码养成经常测试的好习惯 -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; }
        }
    }
}

  

时间: 2024-12-29 11:13:51

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

类族的写法

http://mdsa.51cto.com/art/201507/484133_4.htm 这个模式的精妙的地方在于,调用者可以完全不管子类,事实上,这可以用在设计一个库,可以用来交换实际的返回的类,而不用去管相关的细节,因为它们都遵从抽象超类的方法. 我们的经验是使用类簇可以帮助移除很多条件语句. 一个经典的例子是如果你有为 iPad 和 iPhone 写的一样的 UIViewController 子类,但是在不同的设备上有不同的行为. 比较基础的实现是用条件语句检查设备,然后执行不同的逻辑.

编程算法 - 不能被继承的类(模板参数友元) 代码(C++)

不能被继承的类(模板参数友元) 代码(C++) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 用C++设计一个不能被继承的类. 可以使用模板类模板参数友元, 模板类私有构造函数, 类虚继承这个模板类, 如果类被其他类继承时, 则虚继承会直接调用模板类, 无法构造. 代码: /* * main.cpp * * Created on: 2014.7.13 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #inc

C# 类的规范写法

私有变量写在最上面,简单变量在上,复杂类型在下,以下划线_开头 类的常量紧随其后 不提供公共变量,所有变量以属性的方式对外开放 变量之后是属性 属性之后是方法,构造方法在最上方 公共方法随其后 最后是私有方法 例子: 1 public class SimpleClass 2 { 3 private int _num; 4 private string _word; 5 private static readonly TimeZone _timeZone; 6 private const doub

谈谈Delphi中的类和对象:五、类是一种对数据和操作高度的封装机制;六、类是一种代码重用机制

五.类是一种对数据和操作高度的封装机制 1)数据封装 unit Unit2; interface type TEmployee = class; private FName: String; public Constructor Create; function GetName: String; procedure SetName(AName: String); end; implementation constructor TEmployee.Create; begin FName:= 'Xu

类模板的写法

类模板的写法 定义一个类模板: Template < class或者也可以用typename T > class类名{ //类定义...... }; 说明:其中,template是声明各模板的关键字,表示声明一个模板,模板参数可以是一个,也可以是多个. 例如:定义一个类模板: // ClassTemplate.h #ifndef ClassTemplate_HH #define ClassTemplate_HH template<typename T1,typename T2> c

关于构造函数的扩展写法与类的扩展功能写法区别

- 构造函数的扩展功能写法如下:   class A():   pass   class B(A):   def __init__(self,name,adr):   print("B")   print(name)   print("adr")   class C(B):   def __init__(self,name,adr):#先初始化父类中的参数   # C中想扩展B的构造函数后添加功能   #方法1:   #B.__init__(self,name)  

外贸建站之自适应网站电脑手机网站不同JS效果区分写法代码分享

外贸建站之自适应网站电脑手机网站不同JS效果区分写法代码分享,今天给客户要求把网站Can Clip搞成自适应的,要求电脑跟手机上菜单展开采用不同的效果, 相信很多程序员都有遇到过这种情况,这里把我们的解决方案分享给大家. 1 if($(window).width()>768){ 2 3 //电脑PC端JS代码 4 5 } 对,没错,只需要给电脑端显示的代码用上这个,就可以了,大家可以根据自己的需要修改 不同的宽度,我们在Porsche Piwis III项目中,将PC跟手机端显示的区分宽度设置的

如何养成良好的 C++ 编程习惯(一)—— 内存管理

开篇导读 “养成良好的编程习惯”其实是相当综合的一个命题,可以从多个角度.维度和层次进行论述和评判.如代码的风格.效率和可读性:模块设计的灵活性.可扩展性和耦合度等等.要试图把所有方面都阐述清楚必须花很多的精力,而且也不一定能阐述得全面.因此,本系列文章以软件开发的基础问题为切入点,阐述程序设计和代码编写方面的细节问题,以点带面,旨在激发大家的思考与总结,希望能为大家带来实际的帮助.     虽然本系列文章定位为科普读物,但本座相信它们不但适合新手们学习借鉴,同时也能引发老鸟们的反思与共鸣.欢迎

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

上一篇文章介绍了项目中测试代码的写法.Go项目的测试代码2(项目运用) 这里简单的共享一下测试替身. 当我们写测试代码的时候,经常遇到一个问题.跟别的模块或服务有依赖性,可是功能还没开发完.或是因为各种原因(安全,白名单,内网等等-)开发环境里无法调用相应的模块.这时候我们应该如何去写测试代码? 因此测试替身Test Double出现了. 其功能和名字一样,做替身. 测试替身Test Double的分以下类型. Dummy, Stub, Fake, Spy, Mock Dummy 最简单.最原始