如何测量for循环的执行时间?
我想测量在不同平台上for循环的执行时间,比如php、c、python、Java、javascript等等。我该怎么测量呢?
我对这些平台都比较了解,所以我说的就是这些:
for (i = 0; i < 1000000; i++)
{
}
我不想测量循环内部的任何东西。
稍微修改一下:
@大家 我有一些朋友说编译器会优化这段代码,让这个循环变得没用。我同意这个观点。我们可以加一个小语句,比如一个递增的语句,但实际上我只是想计算在不同语言中每次循环的执行时间。加上递增语句会增加执行时间,这会影响结果,因为在不同平台上,递增一个值的执行时间也不同,这样结果就没意义了。
简单来说,我应该更好地问:
我想计算在各种平台上每次循环的执行时间,我该怎么做???
编辑---
我了解到有Python性能分析工具,这些工具可以评估CPU时间和绝对时间……有什么建议吗?同时我也在研究这个……
12 个回答
javascript
start = new Date;
for(var i = 0; i < 1000000; i++) {}
time = new Date - start;
虽然已经有人给出了C++的答案,但从你的描述来看(“你不想在循环内测量任何东西”),你似乎是想测量一个程序在空循环中运行所花的时间。
这里需要注意的是:不同的平台和处理器运行这个空循环所需的时间会有所不同,而且很多编译器会优化掉这样的循环,这样的话,不管循环的大小是多少,最终得到的结果可能都是“0”。
注意,这也取决于你想要达到什么目标:你是否在意你的程序因为被系统调度器抢占而等待的时间?上面提到的所有解决方案都考虑了实际经过的时间,但这也包括了其他进程运行而不是你自己程序的时间。
如果你不在意这些,上面提到的所有解决方案都不错。如果你在意,你可能需要一些性能分析软件来实际查看循环运行了多长时间。
我建议你先写一个只包含你的循环的程序,然后在Linux环境下运行 time 你的程序可执行文件
。
接着,我会查找一些像 time
这样的工具。不太确定,但我会看看JRat用于Java,还有gcc的gcov用于C和C++。其他语言肯定也有类似的工具。不过,当然,你需要确认它们是否提供实际的时间数据。