Challen created OLINGO-421:
------------------------------

             Summary: java client - further improve getter method's perf in the 
generated proxy codes
                 Key: OLINGO-421
                 URL: https://issues.apache.org/jira/browse/OLINGO-421
             Project: Olingo
          Issue Type: Task
    Affects Versions: V4 4.0.0-beta-02
            Reporter: Challen
            Assignee: Challen
             Fix For: V4 4.0.0-beta-02



OLINGO-415 did enhanced the getter method's perf, but further improvement is 
still expected. (it may be a significant code change, so targetting beta-02)

in a test, t3 (620) is only half of t2 (1240), so the invoke() method still can 
be optimized.

(in AbstractStructuredInvocationHandler.java)
====================
   public Object invoke(final Object proxy, final Method method, final Object[] 
args) throws Throwable {
+       long start1 = System.nanoTime();
        if (method.getName().startsWith("get")) {  
                // Here need check "get"/"set" first for better get-/set- 
performance because
                // the below if-statements are really time-consuming, even 
twice slower than "get" body.
 
                // Assumption: for each getter will always exist a setter and 
viceversa.
       // get method annotation and check if it exists as expected
 
+      long start2 = System.nanoTime();
       final Object res;
       final Method getter = typeRef.getMethod(method.getName());
 
       final Property property = ClassUtils.getAnnotation(Property.class, 
getter);
       if (property == null) {
         final NavigationProperty navProp = 
ClassUtils.getAnnotation(NavigationProperty.class, getter);
         if (navProp == null) {
           throw new UnsupportedOperationException("Unsupported method " + 
method.getName());
         } else {
           // if the getter refers to a navigation property ... navigate and 
follow link if necessary
           res = getNavigationPropertyValue(navProp, getter);
         }
       } else {
         // if the getter refers to a property .... get property from wrapped 
entity
         res = getPropertyValue(property.name(), 
getter.getGenericReturnType());  // inside, ClassUtils.t3 is measured 
       }
 
+      ClassUtils.t2 += System.nanoTime() - start2;
+      ClassUtils.t1 += System.nanoTime() - start1;



( ClassUtils.t3 is measured in  getPropertyValue() method. )
========================
+               long start3 = System.nanoTime();
             res = property == null || property.hasNullValue()
                     ? null
                     : CoreUtils.getObjectFromODataValue(property.getValue(), 
type, service);
+            ClassUtils.t3 += System.nanoTime() - start3;



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to