在一些项目中我们总是需要去设计程序的运行时间,查看各种效率,对程序进行评估或者计算程序的执行时间长短进行计划任务。下面就介绍三种计算C#/.NET获取控制台(Console)程序运行时间的方法。
static void Main(string[] args)
{
//定义一个时间对象
Stopwatch sw = new Stopwatch();
sw.Start();//开始记录时间
const int ExecutionCount = 1000000;
for (int i = 0; i < ExecutionCount; i++)
{
Console.WriteLine("知道91:"+i);
}
sw.Stop();//结束记录时间
Console.WriteLine("程序的运行时间:{0} 秒",sw.Elapsed.Seconds);
Console.WriteLine("程序的运行时间:{0} 毫秒", sw.Elapsed.Milliseconds);
}
static void Main(string[] args)
{
DateTime startTime = DateTime.Now;
//这里执行你的逻辑程序
DateTime endTime = DateTime.Now;
System.Console.WriteLine("Total spend time:" + DateDiff(startTime, endTime));
}
///
/// Calculate Interval Time
///
/// Start Time
/// End Time
///
private static string DateDiff(DateTime startTime, DateTime endTime)
{
string dateDiff = null;
TimeSpan ts1 = new TimeSpan(startTime.Ticks);
TimeSpan ts2 = new TimeSpan(endTime.Ticks);
TimeSpan ts = ts1.Subtract(ts2).Duration();
dateDiff = ts.Hours.ToString() + " hour " + ts.Minutes.ToString() + " min " + ts.Seconds.ToString() + " s ";
return dateDiff;
}
在.NET环境中,需要考虑程序运行所处的线程以及无用单元收集可能在任何时候发生的事实。所以在编写时间测试代码时需要考虑这些情况。在程序执行过程中无用单元收集可能会发生在任何时候。用 GC.WaitForPendingFinalizers()解决; 在.NET环境中,程序运行在被称为应用程序域的进程中Process类拥有的方法允许操作系统选取当前的进程 (程序运行其内的进程),以及选取存储线程开始执行时间的计时器。
class Timing
{
TimeSpan duration;
public Timing()
{
duration =new TimeSpan(0);
}
public void stopTime()
{
duration =Process.GetCurrentProcess().TotalProcessorTime;
}
public void startTime()
{
GC.Collect();
GC.WaitForPendingFinalizers();
}
public TimeSpan Result()
{
return duration;
}
}
class chapter1
{
static void Main()
{
int[] nums = new int[100000];
BuildArray(nums);
Timing tobj = new Timing();
tobj.startTime();
DisplayNums(nums);
tobj.stopTime();
Console.WriteLine("Time: " + tobj.Result().TotalSeconds);
}
static void BuildArray(int[] arr)
{
for (int i = 0; i <= 99999; i++)
arr[i] = i;
}
static void DisplayNums(int[] arr)
{
for (int i = 0; i <= arr.GetUpperBound(0); i++)
Console.WriteLine(arr[i] + "");
}
}
上面三种方法简易不同,但是都有自己的特点,希望读者按照自己的需求去选择。