代码执行效率的才考之一:时间
如何获取一段代码、一个方法等执行了多长时间?
使用 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
所以代码设计的好坏对效率影响还是很大的
![在这里插入图片描述](https://img-blog.csdnimg.cn/603492eca84843f7877cc803cfee28e3.jpg#pic_center)
C#代码执行效率有时候想查看执行一些代码花费了多长时间,或者看某些代码的效率。怎么办呢。 下面通过使用C#方法检测一下新建一个Unity工程,在场景中创建一个GameObject,创建脚本 Efficiency.cs 代码如下using UnityEngine;using System.Collections;using System.Diagnostics;public class Eff
C# 代码执行时间
Stopwatch stopwatch = new Stopwatch(); //实例化
Debug.Log(stopwatch.Elapsed); //获取当前实例测量得出的总运行时间
Debug.Log(stopwatch.ElapsedMilliseconds);//获取当前实例测量得出的总运行时间(以毫秒为单位)
Debug.Log(stopwatch.IsRunning); //获取一个值,该值表示 Stop