以下代码的运行结果时间不为0的可能原因有哪些

你可能运行在了debug下面,还用VS调试他,编译器没有把你的空循环删掉。
■网友
书上说的这种情况应该是优化过的,因为循环里没没做任何事情,运行时这段代码被忽略了。未经优化的情况下如果是1000次,是0的可能性还比较大。上百万肯定有一点延时的。可以这样考虑,CPU主频是1GHz,假设一周期跑一个循环,一百万次也需要1ms。DateTime.Ticks的单位是100ns,一万就是1ms,你看到十几万也很正常。从程序运行的角度看,DateTime.Now底层调用的是GetSystemTimeAsFileTime,这个函数会读取系统的时钟计数,这个计数是随时更新的,更新的间隔与硬件和系统设置有关。这个间隔可以用下面的代码测一下。startTime = DateTime.Now.Ticks;do{ endTime = DateTime.Now.Ticks;} while (startTime == endTime);Console.WriteLine("Interval:{0}", endTime - startTime);在我的机器上是10000,也就是1ms一次。当原来你代码中循环运行时间小于这个时间间隔的时候结果就是0,否则应该是其整数倍的一个值。
■网友
首先,第一,你不应该用DateTime.Now的差来计算而是应该用StopWatch才准确其次,你把Debug改成Release(或者按Ctrl+F5)再试试。
■网友
i \u0026lt;= RUN_NUMBER i++ 可能书上的编译器做了优化?循环里面没代码就不循环?但是你的编译器把上面语句跑了 RUN_NUMBER 次。


    推荐阅读