算法-统计代码执行时间

时间:2021-04-20 18:13:32

作者:vuefine
文献:

平台:.NET 2.0+


  自定义一个统计代码执行时间的类CalcTiming,考虑了:

  • 在统计执行过程中,不允许有垃圾回收。即在统计代码执行时间之前,就让GC完成垃圾回收。
  • 确保统计的是当前进程中代码的执行时间。

    编写代码如下:

    public class CalcTiming
{
TimeSpan startTime;
private TimeSpan endTime;
TimeSpan duration;

public CalcTiming()
{
startTime = new TimeSpan(0);
duration = new TimeSpan(0);
}

public void StartTime()
{
//强制对所有代进行垃圾回收
GC.Collect();
//挂起线程,终结器线程清空该队列为止
GC.WaitForPendingFinalizers();
//用户运行代码的起始时间
startTime = Process.GetCurrentProcess().UserProcessorTime;

}

//统计的代码执行完毕的时间
public void StopTime()
{
endTime = Process.GetCurrentProcess().UserProcessorTime;

duration = endTime.Subtract(startTime);
}

//返回统计的代码执行消耗的时间
public TimeSpan Result()
{
return duration;
}

}

  运用以上CalcTiming类,统计显示数组的消耗时间:

    class Program
{

static void Main(string[] args)
{

int[] nums = new int[100000];
BuildArray(nums);
CalcTiming calcTime= new CalcTiming();
calcTime.StartTime();
DisplayNums(nums);
calcTime.StopTime();
Console.WriteLine(string.Format("共用时间:{0} ms",calcTime.Result().TotalMilliseconds));
Console.Read();
}

static void BuildArray(int[] arr)
{
for (int i = 0; i < 100000; i++)
arr[i] = 1;
}

static void DisplayNums(int[] arr)
{
for (int i = 0; i <= arr.GetUpperBound(0); i++)
Console.Write(arr[i] + " ");
}
}

  总结,在接下来用C#描述所有数据结构,统计消耗的时间时,采用CalcTiming对象。
  源码下载地址:
  http://download.csdn.net/detail/daigualu/9771778