多语言展示
当前在线:641今日阅读:113今日分享:31

ABAP程序开发中动态字段与静态字段的性能差异

ABAP程序开发中,很多资料都说动态字段比静态字段的性能要差,但是差多少呢?没有人说,估计也没有人去测试过。本人针对这两者的性能差异,写了一个程序测试了一下。事实证明,性能差异是有的,但是真的可以忽略不计,毕竟用动态字段的时候,多半都是静态字段解决不了,或者要写一大段逻辑的时候。测试程序如下:*&---------------------------------------------------------------------**& Report ZTRAINING26 动态字段与静态字段的性能测试 **& **&---------------------------------------------------------------------**& Created by Xavery Hsueh(薛现军) on 2015-07-26. **& **&---------------------------------------------------------------------*REPORT ztraining26 NO STANDARD PAGE HEADING.************************************************************************** 定义结构类型************************************************************************TYPES:BEGIN OF ty_result,vbeln TYPE sy-tabix,posnr TYPE vbap-posnr,matnr TYPE vbap-matnr,END OF ty_result.************************************************************************** 定义变量与内表************************************************************************DATA:gt_result TYPE TABLE OF ty_result WITH HEADER LINE,gv_field TYPE char20.FIELD-SYMBOLS: TYPE ty_result, TYPE sy-tabix.************************************************************************** 执行程序事件 Executing the program's events************************************************************************INITIALIZATION.PERFORM sub_init_data.START-OF-SELECTION.PERFORM sub_dynamic_data.PERFORM sub_static_data.*&---------------------------------------------------------------------**& Form SUB_INIT_DATA*&---------------------------------------------------------------------** 给内表添加数据*----------------------------------------------------------------------*FORM sub_init_data .DO 1000000 TIMES.gt_result-vbeln = sy-index.APPEND gt_result.ENDDO.ENDFORM. ' SUB_INIT_DATA*&---------------------------------------------------------------------**& Form SUB_DYNAMIC_DATA*&---------------------------------------------------------------------** 使用动态字段来访问工作区*----------------------------------------------------------------------*FORM sub_dynamic_data .gv_field = 'VBELN'.LOOP AT gt_result.AT END OF (gv_field).ENDAT.ENDLOOP.ENDFORM. ' SUB_DYNIMAC_DATA*&---------------------------------------------------------------------**& Form SUB_STATIC_DATA*&---------------------------------------------------------------------** text*----------------------------------------------------------------------*FORM sub_static_data .LOOP AT gt_result.AT END OF vbeln.ENDAT.ENDLOOP.ENDFORM. ' SUB_STATIC_DATA  在百万条记录的情况下,两者的时间差异不到1秒。若是说差了一倍,似乎是性能差异还挺大,若是考虑到数据的数据量,这一点时间就可以忽略不计了。
推荐信息