C#代码执行时间
代码执行效率的才考之一:时间
如何获取一段代码、一个方法等执行了多长时间?
使用 Stopwatch
下面设计一个求从 1 加到 n 的,n 个数之和,使用两种方式实现,看两个方法各自执行了多长时间
class ExecutingTime
{
public ExecutingTime()
{
int n = 1000000000;
Stopwatch stopwatch = new Stopwatch();
stopwatch.Start();
long sum = Sum(n);
stopwatch.Stop();
Console.WriteLine("执行时间 Milliseconds:" + stopwatch.ElapsedMilliseconds + " Ticks:" + stopwatch.ElapsedTicks);
Console.WriteLine("1 to 100000000 sum:" + sum + "\n");
long millisseonds = stopwatch.ElapsedTicks * 1000 / Stopwatch.Frequency;
Console.WriteLine("ticks:" + stopwatch.ElapsedTicks + " =" + millisseonds + " Milliseconds \n");
/
// 重置时间
stopwatch.Reset();
stopwatch.Start();
sum = Sum2(n);
stopwatch.Stop();
Console.WriteLine("执行时间 Milliseconds:" + stopwatch.ElapsedMilliseconds + " Ticks:" + stopwatch.ElapsedTicks);
Console.WriteLine("1 to 100000000 sum:" + sum + "\n");
}
private long Sum(int n)
{
long sum = 0;
for (int i = 1; i <= n; ++i)
{
sum += i;
}
return sum;
}
private long Sum2(int n)
{
long sum = (long)(1 + n) * (n / 2);
return sum;
}
}
执行结果如下,首先保证正确性,看两个打印的 sum值 完全相同且结果正确
第一个执行时间 Milliseconds:1897 Ticks:5915453
第二个执行时间 Milliseconds:0 Ticks:266
从毫秒级别已经看不出第二个方法执行多长时间了(不足1毫秒所以显示 0)
下面看 ticks,注意:ElapsedTicks 换算成毫秒不是除以 TimeSpan.TicksPerMillisecond
而是依赖 CPU 频率而定,需要使用 Stopwatch.Frequency(每秒ticks),计算公式如下,代码中也验证了ticks 到millisseonds 的转换结果
long millisseonds = stopwatch.ElapsedTicks * 1000 / Stopwatch.Frequency;
所以两个代码的执行时间比为 5936013 : 257 = 23097 : 1
所以代码设计的好坏对效率影响还是很大的