java中多个for内的计时方法
我在为的多个java中多个for内的计时方法,java,elapsedtime,Java,Elapsedtime,我在为的多个中包含的两种方法计时时遇到问题。我使用的是System.currentTimeMillis()。问题是我不知道把开始时间和结束时间放在哪里。我想计时methodA和methodB的5次执行。 当我运行它时,我得到方法A的12ms,方法B的0ms,但程序运行大约需要10分钟。代码如下所示: int count = 0; double e = 0.3; long startTimeA; long endTimeA; long startT
中包含的两种方法计时时遇到问题。我使用的是System.currentTimeMillis()代码>。问题是我不知道把开始时间和结束时间放在哪里。我想计时methodA和methodB的5次执行。
当我运行它时,我得到方法A的12ms
,方法B的0ms
,但程序运行大约需要10分钟。代码如下所示:
int count = 0;
double e = 0.3;
long startTimeA;
long endTimeA;
long startTimeB;
long endTimeB;
long sumA = 0;
long sumB = 0;
for(int k=0; k<5; k++){
startTimeA = System.currentTimeMillis();
startTimeB = System.currentTimeMillis();
for(int i = 0; i < 40; i++) {
for(int j = i + 1; j < 40; j++) {
double a = methodA();
endTimeA = System.currentTimeMillis() - startTimeA;
double b = methodB();
endTimeB = System.currentTimeMillis() - startTimeB;
int c = methodC();
}
sumA += endTimeA;
sumB += entTimeB;
}
}
System.out.println("total time A: " + sumA + " ms");
System.out.println("total time B: " + sumB + " ms");
int count=0;
双e=0.3;
长startTimeA;
长时程a;
长startTimeB;
长时程b;
长sumA=0;
长sumB=0;
对于(int k=0;k,您应该阅读微观基准测试以及如何在实践中进行
这里有一种方法可以完成您想要做的事情:
private void doSomething() {
long startTimeA = System.currentTimeMillis();
executeA();
long endTimeA = System.currentTimeMillis();
System.out.println("Total Time A: " + (endTimeA - startTimeA));
long startTimeB = System.currentTimeMillis();
executeB();
long endTimeB = System.currentTimeMillis() - startTimeB;
System.out.println("Total Time B: " + (endTimeB - startTimeB));
}
private void executeA() {
for(int k=0; k<5; k++) {
for(int i = 0; i < 40; i++) {
for(int j = i + 1; j < 40; j++) {
double a = methodA();
}
}
}
}
private void executeB() {
for(int k=0; k<5; k++) {
for(int i = 0; i < 40; i++) {
for(int j = i + 1; j < 40; j++) {
double b = methodB();
}
}
}
}
private void doSomething(){
long startTimeA=System.currentTimeMillis();
executeA();
long-endTimeA=System.currentTimeMillis();
System.out.println(“总时间A:+(endTimeA-startTimeA));
long startTimeB=System.currentTimeMillis();
executeB();
long-endTimeB=System.currentTimeMillis()-startTimeB;
System.out.println(“总时间B:+(endTimeB-startTimeB));
}
私有void executeA(){
对于(intk=0;kfor(intk=0;k只需移动
sumA += endTimeA;
sumB += entTimeB;
变成“为了j”循环。也许你想打印sumA和sumB而不是endTimeA和endTimeB?是的,很抱歉,我本来打算写它的sumA,sumByeah,但这一个给了我每次执行的总时间,我想要5次执行的总时间。是的,但是如果我对每个方法都运行三次,这不比一次要花更多的时间吗?我假设methodA
和methodB
是两个独立的方法,您需要以某种方式对它们进行基准测试。仅用于循环的甚至不会花费几毫秒,时间将取决于这两个方法的主要复杂性。
sumA += endTimeA;
sumB += entTimeB;