zoukankan      html  css  js  c++  java
  • 如何使用ABAP异步RFC调用提升应用性能

    采用如下report 研究asynchronous RFC call的性能提升:

    PARAMETERS: num TYPE i OBLIGATORY DEFAULT 10.
    DATA:ls_line     TYPE zjerry1,
         lv_start    TYPE i,
         lv_end      TYPE i,
         lv_taskid   TYPE c LENGTH 8,
         lv_index    TYPE c LENGTH 4,
         lv_finished TYPE i,
         lv_count    TYPE i.
    
    START-OF-SELECTION.
      PERFORM solution2.
    
    FORM solution2.
      DELETE FROM zjerry1.
    
      GET RUN TIME FIELD lv_start.
    
      DO num TIMES.
        lv_index = sy-index.
        lv_taskid = 'Task' && lv_index.
    
        CALL FUNCTION 'ZINSERT' STARTING NEW TASK lv_taskid PERFORMING callback ON END OF TASK
          EXPORTING
            iv_index = CONV comm_product-product_id( sy-index ).
      ENDDO.
    
      WAIT UNTIL lv_finished = num.
      GET RUN TIME FIELD lv_end.
    
      lv_end = lv_end - lv_start.
    
      WRITE: / 'Solution2: ' , lv_end COLOR COL_NEGATIVE.
    
      SELECT COUNT( * ) INTO lv_count FROM zjerry1.
    
      ASSERT lv_count = num.
    ENDFORM.
    
    
    FORM callback USING p_task TYPE clike.
      ADD 1 TO lv_finished.
    ENDFORM.
     
    function module ZINSERTmonitor的是一个比较费时的操作,在末尾会有一个DB的insertion:
     
    DATA: ls_line TYPE zjerry1,
            lv_cal  TYPE timestamp,
            lv_cal1 TYPE timestamp.
    
      GET TIME STAMP FIELD lv_cal.
      DO 10000 TIMES.
        lv_cal = lv_cal + 1.
    
        lv_cal = ( lv_cal * 13 ) / 12.
    
        DO 100 TIMES.
          GET TIME STAMP FIELD lv_cal1.
    
          lv_cal = lv_cal  * 13 / 17.
        ENDDO.
      ENDDO.
    
      ls_line-code_value = iv_index.
    
      INSERT zjerry1 FROM ls_line.
      ASSERT sy-subrc = 0.
     
      COMMIT WORK AND WAIT.
    

    DB的结构非常简单:

    如果在report 里直接调用ZINSERT, response time为4.493 seconds.

    如果在DO 2 TIMES里调用两次ZINSERT, 两次function module call是依次执行的,response time为8.493 seconds

    如果用report 以参数2 以异步的方式调用ZINSERT 2次,report 本身的response time为3.074 seconds:

    number = 3:

    number = 5:

    要获取更多Jerry的原创文章,请关注公众号"汪子熙":

  • 相关阅读:
    [转载]使用uiautomator做UI测试
    [转载]Android相关开发网站
    [转载]Android开发必备的21个免费资源和工具
    c# List集合的Find方法适用
    c# GridView Footor列求合计
    c# List集合排序
    mysql中插入多条记录-微软批处理
    mysql中插入多条记录-微软批处理
    VS2005快捷键
    LinqToSql 小例子
  • 原文地址:https://www.cnblogs.com/sap-jerry/p/12371095.html
Copyright © 2011-2022 走看看