需要注意的:每次程序运行的时间返回值是不一样的。和机子的性能有关系。代码大部分也有注释了。核心代码就是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]+" ");
}
}
}
}