我想测试问题中java中两个实现中哪一个是最快的。 我有两个jar文件,我可以从终端执行这两个实现。我想要执行大约100次,并分析哪一个是最快做那个或那个任务。 在输出中,其中一行是“执行时间:xx”,我需要捕获这个xx以放入一个数组或类似的东西以便稍后进行分析
当我正在执行jar时,我还要提供一些输入命令(比如搜索名称或数字)。
我最简单的做法是哪种语言。 我知道Bash和Python的基础
谢谢
答案 0 :(得分:1)
对不起,但为什么你不打造一个罐子,可以打任何罐子n次?
例如:
public static void main(String[] args) {
for(int i=0;i<1000;i++) {
params1 = randomNumber();
params2 = randomName();
...
paramsN = randomTime();
MYJAR1 test1 = new MYJAR1(params1,params2,...,paramsN);
timerStart();
test1.start();
timerEnd();
printTimer();
}
}
并为第二个罐子做同样的事。
我希望我的想法可以帮到你。
再见
答案 1 :(得分:0)
如果您使用(比方说)Perl,您可以关闭该过程,通过重定向捕获输出并过滤时间。 e.g。
if (open(PROCESS, "myproc |")) {
while(<PROCESS>) {
if (/executing time : (\d+)/) {
# $1 has the time now
}
}
}
(未编译或测试!)
分析数据的最简单方法可能是将上述输出重定向到文件,然后将其加载到Excel中。然后,您可以使用Excel计算平均值/最大/分钟和标准。开发人员(如果你愿意的话)很容易。
答案 2 :(得分:0)
好的我找到了3个不同的脚本^^
在java代码中,对于每个函数:
long time1 = System.currentTimeMillis();
// some code for function 1
long time2 = System.currentTimeMillis();
try {
OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(new File("log.txt"),true));
osw.write("function1,"+(time2 - time1)+"\n");
osw.close();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
}
运行500倍两种算法的bash代码
#!/bin/bash
i=0
while [ $i -lt 500 ]
do
./algo1.ex
./algo2.ex
i=$(( $i+1 ))
done
一个(或两个实际上,每个算法一个)期望代码在执行期间执行命令
#!/usr/bin/expect -f
spawn java -jar algo1.jar
expect "enter your choice" {send "1\n"}
expect "enter a name :" {send "Peju, M.\n"}
expect "enter your choice" {send "2\n"}
expect "enter a name :" {send "Creasy, R. J.\n"}
expect "enter your choice" {send "0\n"}
exit
由于我不知道如何在bash中执行此操作,因此我使用了一个python代码
#!/usr/bin/python
# -*- coding: utf8 -*-
import sys
if __name__ == "__main__":
if sys.argv[1:]:
arg = sys.argv[1]
filin = open(arg, 'r')
line = filin.readline()
res= 0, 0, 0
int n = 1
while line !='':
t = line.partition(',')
if t[0] == "function1":
res = (res[0] + int(t[2]), res[1], res[2])
if t[0] == "function2":
res = (res[0], res[1] + int(t[2]), res[2])
if t[0] == "function3":
res = (res[0], res[1], res[2] + int(t[2]))
ligne = filin.readline()
n = n+1
print res
print (res[0]/(n/3.0), res[1]/(n/3.0), res[2]/(n/3.0))
filin.close()
它有效 但感谢您的主张