2016-11-24 6 views
0

Gibt es eine Möglichkeit, die Zeit für jede Methode in einem Paket (die keine Klassen enthält) zu berechnen? Anstelle der Startzeit und Endzeit der Pakete für jede Methode. Gibt es noch andere Möglichkeiten?Zeitberechnung für jede Methode in einem Paket.

Vielen Dank im Voraus!

+1

haben Sie sich AOP angesehen? –

+0

Wenn Sie dies nur einmal, aber nicht für immer benötigen, dann werfen Sie einen Blick auf einen Java Profiler – Ralph

+0

. Lesen Sie diese Tipps zum Profiling Ihrer App: https://www.infoq.com/articles/java-profiling-with-open- source/ –

Antwort

0

Mit AspectJ können Sie verwenden .around() Anmerkung:

@Aspect 
public class TimedAnnotation { 
    @Around("execution(* *(..)) && @annotation(TimedMethod)") 
    public Object around(ProceedingJoinPoint point) throws Throwable { 
     long start = System.currentTimeMillis(); 
     try { 

      Object p = point.proceed(); 

      return p; 
     } 
     finally { 
      System.out.println(System.currentTimeMillis() - start); 
     } 
    } 
} 

Du musst immer noch für jede Methode, um diese Anmerkung setzen:

@TimedMethod 
public void doSomething() { 
... 
} 

Und Sie werden AspectJ hinzufügen müssen zu Ihrem pom.xml:

<dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjrt</artifactId> 
     <version>1.7.3</version> 
    </dependency> 
    <dependency> 
     <groupId>org.aspectj</groupId> 
     <artifactId>aspectjweaver</artifactId> 
     <version>1.8.9</version> 
    </dependency> 
+0

Funktioniert es für diesen Code: public void doSomething() {xyzclass.execute()}. Ich muss die Zeit für beide DoSomething und Execute-Methode in xyzclass berechnen. – manikumar

+0

Wenn Sie xyzclass steuern, können Sie auch @TimedMethod um .execute() setzen. –

Verwandte Themen