C# 性能测试程序及编写要点

来源:互联网 发布:mac自带修图软件 编辑:程序博客网 时间:2024/05/06 19:14

直接看程序:

    class Timing
    {
        TimeSpan timestart;
        TimeSpan duration;
        public void Start()
        {
            GC.Collect();
            GC.WaitForPendingFinalizers();
            timestart = Process.GetCurrentProcess().TotalProcessorTime;
        }
        public void Stop()
        {
           
            duration = Process.GetCurrentProcess().TotalProcessorTime.Subtract(timestart);
        }
        public TimeSpan Result { get { return duration; } }
    }

    class Program
    {
        static public string BuildSB(int size)
        {
            StringBuilder strBd = new StringBuilder();
            for (int i = 0; i < size; i++)
            {
                strBd.Append("a");
            }
            return strBd.ToString();
        }

        static public string BuildString(int size)
        {
            string str = "";
            for (int i = 0; i < size; i++)
            {
                str += "i";
            }
            return str;
        }

        static void Main(string[] args)
        {
            Timing t1 = new Timing(), t2 = new Timing();
            int size = 50000;
            // 测试 BuildSB 的性能
            t1.Start();
            for (int i = 0; i < 500; i++)
                BuildSB(size);
            t1.Stop();
            // 测试 BuildString 的性能
            t2.Start();
            BuildString(size);
            t2.Stop();
            Console.WriteLine(t1.Result);
            Console.WriteLine(t2.Result);
            Console.Read();
        }
    }

结果如下:

00:00:00.2343750
00:00:00.2656250

可以看出,使用BuildSB方法 500遍 和使用BuildString方法 1 遍的时间差不多。


红色部分,用来测试代码性能。其中几个要点:

1、在 Timing.start() 中,先设置起始时间;

2、在 Timing.start() 中,要先把垃圾回收一遍,并且把 垃圾回收的线程挂起,因为系统垃圾回收的发生时间是不确定的,会影响测试的结果。

3、我们用的是 Process.GetCurrentProcess().TotalProcessorTime 来进行时间统计,实际C#代码性能测试还可以使用 StopWatch、 UserProcessorTime。建议用 TotalProcessorTime。因为,StopWatch 统计的还包括“ 上屏”时间,比如说在 控制台中打印的时间,而不仅仅是 CPU处理代码的时间; 而UserProcessorTime 统计的是 CPU用户时间,没有统计CPU内核时间。TotalProcessorTime 统计的是CPU的用户时间和内核时间的总和。

2 0
原创粉丝点击