性能測試類,讓你寫法代碼養成經常測試的好習慣 -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; }
        }
    }
}

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM