gpt4 book ai didi

java - 注释一个方法来打开性能跟踪

转载 作者:行者123 更新时间:2023-11-30 03:02:15 24 4
gpt4 key购买 nike

我有一个测试类,其中有一个名为public void httpcall()的方法,我需要获取该方法的执行时间。为了做到这一点,我在调用它之前和之后使用了 System.nanoTime() 。我从该持续时间中获取执行时间。

代码片段:

public class Test{

public void httpcall(){
try {

HttpResponse rs = HttpClientUtil.get("http://192.169.1.2:9090/plugins/restapi/v1/users/9223370580466120397/roster",RestOpenfire.ACCEPT, "8V9BUNA0f1gNQI3S");


} catch (Exception e) {

System.out.println("Error : "+e);

}
}

public static void main(String[] args) {

Test test=new Test();
long startTime = System.nanoTime();

test.httpcall();

long endTime = System.nanoTime();

long duration = (endTime-startTime);

System.out.println("Execution Time : "+duration);

}

}

我想创建一个像@Time这样的注释,它给出了方法的执行时间,比如..

@Time
public void httpcall(){
try {
HttpResponse rs = HttpClientUtil.get("http://192.169.1.2:9090/plugins/restapi/v1/users/9223370580466120397/roster",
RestOpenfire.ACCEPT, "8V9BUNA0f1gNQI3S");
} catch (Exception e) {
System.out.println("Error : " + e);
}
}

我怎样才能做到这一点?

最佳答案

您可以尝试使用aspectj,它可以在构建过程中更改源代码,在称为编织的过程中更改.class文件,或者在运行时更改它。

https://mathewjhall.wordpress.com/2011/03/31/tracing-java-method-execution-with-aspectj/

想想,这可能有点矫枉过正。除非您有一个难以重构的庞大系统,否则我建议使用模板方法。也就是说,

abstract class Measurable
{
protected void abstract doWork();

public void execute(){
stopWatch = StopWatch.start();
doWork();
stopWatch.stop();
System.out.println(stopWatch.getTime());
}
}

class MyHttpClient extends Measurable
{
doWork(){
HttpResponse rs = HttpClientUtil.get("http://192.169.1.2:9090/plugins/restapi/v1/users/9223370580466120397/roster",RestOpenfire.ACCEPT, "8V9BUNA0f1gNQI3S");
}
}

public static void main(String[] args) {

MyHttpClient test=new MyHttpClient();
test.execute();
}

所有对 MyHttpClient 的使用都会调用 execute() 方法。

另请注意,我使用了 StopWatch 类,因为它比使用 System.currentTimeMillis 更加优雅和标准。 https://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/time/StopWatch.html

关于java - 注释一个方法来打开性能跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35667257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com