7

假设我有一个以这种方式在 Unix 中执行的代码:

$ ./mycode

我的问题是有没有一种方法可以计算我的代码执行 K 次的运行时间。例如,K 的值 = 1000。

我知道 Unix“时间”命令,但只执行了 1 个实例。

4

6 回答 6

14

改进/澄清查理的回答:

time (for i in $(seq 10000); do ./mycode; done)
于 2009-02-18T07:06:46.083 回答
13

尝试

$ time ( your commands )

编写一个循环进入括号以根据需要重复您的命令。

更新

好的,我们可以解决命令行太长的问题。这是 bash 语法,如果您使用另一个 shell,您可能必须使用expr(1)

$ time (
> while ((n++ < 100)); do echo "n = $n"; done
> )

real    0m0.001s
user    0m0.000s
sys     0m0.000s
于 2009-02-18T07:03:38.540 回答
5

只是一个建议:确保这个“基准”接近你对执行程序的实际使用。如果这是一个短暂的进程,那么仅创建进程就可能会产生很大的开销。不要假设它与程序中将其实现为循环相同。

于 2009-02-18T07:24:43.777 回答
3

为了增强一些其他响应,如果您决定测试,例如一百万次,其中一些(基于 seq 的响应)可能会导致命令行太长。以下没有这个限制

time ( a=0 ; while test $a -lt 10000 ; do echo $a ; a=`expr $a + 1` ; done)
于 2009-02-18T07:25:32.247 回答
2

“命令行太长”问题的另一个解决方案是在 bash 中使用 C 风格的 for 循环:

 $ for ((i=0;i<10;i++)); do echo $i; done

这也适用于 zsh(尽管我敢打赌 zsh 有一些更好的使用方式,但我对 zsh 还是很陌生)。我无法测试其他人,因为我从未使用过任何其他人。

于 2009-02-21T14:19:11.183 回答
0

如果您担心不断地将可执行文件加载和卸载到进程空间的开销,我建议您设置一个 ram 磁盘并从那里为您的应用程序计时。

早在 70 年代,我们曾经能够在可执行文件上设置一个“粘性”位并将其保留在内存中。我不知道有哪个 unix 现在支持这种行为,因为它使更新应用程序成为一场噩梦。 .. :o)

于 2009-02-18T07:51:48.970 回答