我想測試java中兩個實現中哪一個是最快的。 我有兩個jar文件,可以從終端執行兩個實現。我想要執行大約100次,並分析哪一個是最快的做這個或那個任務。 在輸出其中一行是「執行時間:xx」,我需要趕上這個xx放入一個數組或類似的東西,以便稍後分析它多次執行jar文件並分析輸出
當我執行jar時,也給一些輸入命令(如搜索名稱或數字)。
我不會用哪種語言做它最簡單。 我知道的Bash和Python
基礎謝謝
我想測試java中兩個實現中哪一個是最快的。 我有兩個jar文件,可以從終端執行兩個實現。我想要執行大約100次,並分析哪一個是最快的做這個或那個任務。 在輸出其中一行是「執行時間:xx」,我需要趕上這個xx放入一個數組或類似的東西,以便稍後分析它多次執行jar文件並分析輸出
當我執行jar時,也給一些輸入命令(如搜索名稱或數字)。
我不會用哪種語言做它最簡單。 我知道的Bash和Python
基礎謝謝
好,我有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();
}
一個bash代碼到500次運行兩種算法
#!/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()
而且
對不起,你爲什麼不要讓調用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();
}
}
,併爲所述第二罐中的相同。
我希望我的想法可以幫助你。
再見
如果使用(比方說)Perl中,你可以生成過程中脫落,捕捉通過重定向輸出和過濾的時間。例如
if (open(PROCESS, "myproc |")) {
while(<PROCESS>) {
if (/executing time : (\d+)/) {
# $1 has the time now
}
}
}
(未編譯或測試!)
也許分析數據的最簡單的方法是重定向上述輸出到文件中,然後將其加載到Excel中。然後,您可以使用Excel來計算平均值/最大值/分鐘和標準偏差。 devs(如果你願意)平凡。
我不知道Perl,但我想它可以工作。 我也可以編輯jar文件,只有時間作爲輸出。 但我仍然有問題,我該怎麼說:執行jar,發送1作爲輸入,發送「東西」作爲輸入,發送「退出」並把輸出放在一個文件中,以便稍後分析爲例(以excel爲例) – 2009-11-21 12:20:01
我使用Linux,但作品 但感謝你的命題問題是我想分析的不是所有程序的執行,而是不同的部分。 哪兩個是最快的:構建數據結構,搜索元素,添加元素,刪除元素,...當我執行jar時,我必須提供一些命令來說出我想要的內容做,並在每次產生輸出。 – 2009-11-21 11:38:38
以上將意味着靜態初始化程序等只會運行一次。如果它們有時間意義並且對統計數據有貢獻,那麼它們將不會是OP想要的。 – 2009-11-21 11:49:13
您可以使用netbeans分析器對jar進行分析,並顯示如何花費任何一種方法。 – 2009-11-21 11:52:41