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

  

原文地址:https://www.cnblogs.com/sunkaixuan/p/4540840.html