快捷搜索: 王者荣耀 脱发

【C#】 三种计算程序运行时间的方法

System.DateTime.Now

属性 Now 返回一个 DateTime 值,该值表示本地计算机上的当前日期和时间。 请注意,值(表示自 0001 年 1 月 1 日午夜以来经过的计时周期数)与该值DateTime的字符串表示形式(以特定于区域性的格式表示日期和时间值)之间存在DateTime差异。

准确性受服务器时间影响

DateTime dt1 = System.DateTime.Now;
System.Threading.Thread.Sleep(time_cap);
DateTime dt2 = System.DateTime.Now;

TimeSpan ts = dt2.Subtract(dt1);
Console.WriteLine("example1 time {0}", ts.TotalMilliseconds);

Stopwatch

Stopwatch 在基础计时器机制中对计时器的计时周期进行计数,从而测量运行时间。 如果安装的硬件和操作系统支持高分辨率性能计数器,则 Stopwatch 类将使用该计数器来测量运行时间; 否则,Stopwatch 类将使用系统计数器来测量运行时间。 使用 Frequency 和 IsHighResolution 字段可以确定实现 Stopwatch 计时的精度和分辨率。

System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
System.Threading.Thread.Sleep(time_cap);
sw.Stop();
//这个是实例运行的毫秒数
//sw.ElapsedMilliseconds
TimeSpan ts2 = sw.Elapsed;
Console.WriteLine("example2 time {0}", ts2.TotalMilliseconds);

c++ API

如果已安装的硬件支持高分辨率性能计数器,则返回值为非零值。

如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。 在运行 Windows XP 或更高版本的系统上,该函数将始终成功,因此永远不会返回零。

long count1 = 0;
long count2 = 0;
long freq = 0;
double result = 0;

QueryPerformanceFrequency(ref freq);
QueryPerformanceCounter(ref count1);
System.Threading.Thread.Sleep(time_cap);
QueryPerformanceCounter(ref count2);

result = (double)(count2 - count1) / (double)freq;
Console.WriteLine("example3 time {0}", result);

最后,推荐使用Stopwatch

    代码可读性高 精度ok 便捷
没有粉丝,没有评论,甚至连读者都没有。因为自己写的烂,因为自己水平有限,所以自己的作品一经发出就石沉大海了,得不到任何的回信,就好像自己写的东西是给自己看的。自己的作品怎么看都好像不够完美,全身的毛病,所以读者不喜欢也很正常对吧!
其实最让我开心的是有些读者们夸我文笔不错,或许是有人第一次这样夸我的缘故吧!又或许是我写的东西没什么人认可,我感受到了一种前所未有的激动,对于未来的憧憬,对自己写下去的动力。
因为有你们,我的写作之路才不孤独,因为有你们,我才能坚持到现在,如果有一天我真的写出圈了,或许我们可以整个交流会之类的,到时候促膝长谈。
“书山有路勤为径,学海无涯苦作舟。”写作苦是苦了点,整得我差点就想放弃了,不过还好有你们。我也不急着成功,因为没有个几十年如一日的坚持,哪能轻易成功?
茫茫文海无人意,天下有君识吾心。文海很孤独,但是有诸君,便足以令我至千里。
经验分享 程序员 微信小程序 职场和发展