多个for in java里面的计时方法
Timing method inside multiple for in java
我在计算包含在多个 for
中的两种方法时遇到了问题。我正在使用 System.currentTimeMillis();
。问题是我不知道把开始时间和结束时间放在哪里。我想为 methodA 和 methodB 的 5 次执行计时。
当我 运行 时,我得到方法 A 的 12 ms
和方法 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");
您应该了解 micro-benchmarking
以及如何在实践中做到这一点。
这里有一种方法可以完成您想要做的事情:
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();
}
}
}
}
for(int k=0; k<5; k++){
sumA = 0;
sumB = 0;
for(int i = 0; i < 40; i++) {
for(int j = i + 1; j < 40; j++) {
startTimeA = System.currentTimeMillis();
double a = methodA();
endTimeA = System.currentTimeMillis() - startTimeA;
sumA += endTimeA;
startTimeB = System.currentTimeMillis();
double b = methodB();
endTimeB = System.currentTimeMillis() - startTimeB;
sumB += endTimeB;
int c = methodC();
}
}
System.out.println("total time A: " + sumA + " ms");
System.out.println("total time B: " + sumB + " ms");
}
搬家
sumA += endTimeA;
sumB += entTimeB;
进入"for j"循环。
我在计算包含在多个 for
中的两种方法时遇到了问题。我正在使用 System.currentTimeMillis();
。问题是我不知道把开始时间和结束时间放在哪里。我想为 methodA 和 methodB 的 5 次执行计时。
当我 运行 时,我得到方法 A 的 12 ms
和方法 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");
您应该了解 micro-benchmarking
以及如何在实践中做到这一点。
这里有一种方法可以完成您想要做的事情:
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();
}
}
}
}
for(int k=0; k<5; k++){
sumA = 0;
sumB = 0;
for(int i = 0; i < 40; i++) {
for(int j = i + 1; j < 40; j++) {
startTimeA = System.currentTimeMillis();
double a = methodA();
endTimeA = System.currentTimeMillis() - startTimeA;
sumA += endTimeA;
startTimeB = System.currentTimeMillis();
double b = methodB();
endTimeB = System.currentTimeMillis() - startTimeB;
sumB += endTimeB;
int c = methodC();
}
}
System.out.println("total time A: " + sumA + " ms");
System.out.println("total time B: " + sumB + " ms");
}
搬家
sumA += endTimeA;
sumB += entTimeB;
进入"for j"循环。