Welcome

首页 / 软件开发 / 数据结构与算法 / 数据结构与算法系列(1)时间测试

数据结构与算法系列(1)时间测试2014-04-26 博客园 追忆前言

好久都把数据结构和算法的东西忘完了,最近想重温下这些知识。因此就写了<<数据结构与 算法系列》的文章,希望能和大家共同学习,共同探讨这方面的知识。希望大家多多指异。

1.时间测试

由于本部分内容采用了一种实用的方法来分析数据结构与算法检测,所以在这里避开了使用大O分 析法,而采用运行简单基准测试的方法来代替。这种测试将会说明运行一段代码需要多少秒数(或者 无论什么时间单位)。

基准法测试是使用时间测试的方法来衡量运行完整算法所花费的时间长度。如同科学一样,基准测 试也像是一门艺术,而且为了获得精准分析需要很小心测试代码的方法。下面就来进行详细讨论。

1.1一个简单化的时间测试

首先时间测试需要一此代码。出于简单的考虑,这里将测试一个有关控制台数组内容的子程序。代 码如下所示:

 1:         //建立数组

 2:         static void BuildArray(int[] arr)

 3:         {

 4:             for (int i = 0; i <= 99999; i++)

 5:             {

 6:                 arr[i] = i;

 7:             }

 8:         }

 9:

10:         //输出数组

11:         static void DisplayNums(int[] arr)

12:         {

13:             for (int i = 0; i <= arr.GetUpperBound(0); i++)

14:             {

15:                 Console.WriteLine(arr[i] + " ");

16:             }

17:         }

为了测试这个子程序,需要创建一个就是,并且把子程序调用时的系统时间赋值给此变量。此外, 还需要一个变量用来存储子程序返回时的时间。根据这些内容写出了下述这段代码:

DateTime startTime;

TimeSpan endTime;

startTime = DateTime.Now;    endTime = DateTime.Now.Subtract(startTime);

我的机器配置:CPU 1.9GHz 四核,4G内存,Win7旗舰版,在上面运行代码时,子程序的运行时间 大约30秒左右(29.94)。虽然这段代码对执行时间的测试好像挺有道理,但是在.NET环境下运行时间 代码是完全不合适的。为什么呢?

首先,代码测量的是从子程序调用开始到子程序返回主程序之间流失的时间。但是测试所测量的时 间也包含了与C#程序同时运行的其他进行所用的时间。

其次,时间代码不考虑.NET环境下执行的无用单元收集。在类型.NET这样的运行环境中,系统可能 在执行无用单元收集的任何一个时间暂停。时间代码实例没有考虑无用单元收集时间,以及很容易受 到无用单元收集影响的结果时间。那么到底应该怎么做呢?