c#数据结构之运行时间测试

来源:互联网 发布:win10应用网络权限设置 编辑:程序博客网 时间:2024/06/08 03:47

需要注意的:每次程序运行的时间返回值是不一样的。和机子的性能有关系。代码大部分也有注释了。核心代码就是GetRunningTime()这个函数里面的代码。

using System;using System.Collections.Generic;using System.Diagnostics;using System.Linq;using System.Text;namespace _001运行时间测试{    class Program    {        /// <summary>        /// 说明:每次程序运行的时间返回值是不一样的。        /// </summary>        /// <param name="args"></param>        static void Main(string[] args)        {            //Test函数作为参数传递给GetRunningTime 得到Test函数运行的时间            TimeSpan endTime = GetRunningTime(Test);            //TotalSeconds 表示的总秒数。            Console.WriteLine("使用时间:"+endTime.TotalSeconds);            Console.ReadKey();        }        static void Test()        {            int[] arr = new int[100000];            BuildArray(arr);//给arr赋值             DisplayNums(arr);//显示  浪费时间        }        /// <summary>        /// 获取action 这个函数要运行的时间        /// </summary>        /// <param name="time">需要运行的函数 action( 要求无参数 无返回值)</param>        /// <returns>时间间隔</returns>        static TimeSpan GetRunningTime(Action action )        {            GC.Collect();  //开始进行垃圾回收 如果不回收运行时间测试的时候,系统自动回收会导致测量时间不准确            GC.WaitForPendingFinalizers();//挂起当前线程,等待垃圾回收结束。            ////它指示关联进程在该进程的应用程序部分内(而不是在操作系统内核中)运行代码所用的时间。            TimeSpan startTime = Process.GetCurrentProcess().UserProcessorTime;            //匿名调用函数            action(); //ps:你也可以直接复制这个函数 然后把要运行的代码放到这里执行就好了            //获取程序运行代码的时间 减去startTime的时间 得到 action函数运行用到时间            TimeSpan endTime = Process.GetCurrentProcess().UserProcessorTime.Subtract(startTime);            return endTime;        }        /// <summary>        /// 构建数据 最大99999        /// </summary>        /// <param name="arr"></param>        static void BuildArray(int[] arr)        {            for (int i = 0; i < 99999; i++)            {                arr[i] = i;            }        }        /// <summary>        /// 显示arr数据        /// </summary>        /// <param name="arr"></param>        static void DisplayNums(int[] arr)        {            for (int i = 0; i < arr.GetUpperBound(0); i++)//GetUpperBound(0) 获取一位数据坐标最大值,GetUpperBound(1) 获取二位数据坐标最大值            {                Console.Write(arr[i]+" ");            }        }    }}
0 0
原创粉丝点击