ABAP开发示例:使用 ASSIGN加速 LOOP循环

根据下面的程序的运行对比,发现使用ASSIGN 的程序比另一个快了大约 25%。

使用 "LOOP AT itab ASSIGNING ." 而不是使用工作区(无论是显式的还是通过表头行的),可以避免数据在工作区的传输。字段符号是一个指针,指向(!)表中的行,所以可以直接修改表中的行而不需要使用 MODIFY ,从而避免另一次数据传输。示例程序如下:

sql 复制代码
Report Y1.
TYPES: BEGIN OF rec_type,
                count TYPE i,
                string(1024) TYPE c,
           END OF rec_type.
TYPES tab_type TYPE rec_type OCCURS 0.
DATA: itab TYPE tab_type,
          wa TYPE rec_type.
DO 100000 TIMES.
      APPEND wa TO itab.
ENDDO.
LOOP AT itab INTO wa.
         wa-count = sy-tabix.
         wa-string = 'x'.
         MODIFY itab FROM wa. "修改内表
ENDLOOP.
使用 assign 的代码:
Report Y2.
TYPES: BEGIN OF rec_type,
                 count TYPE i,
                 string(1024) TYPE c,
          END OF rec_type.
TYPES tab_type TYPE rec_type OCCURS 0.
DATA: itab TYPE tab_type,
          wa TYPE rec_type.
FIELD-SYMBOLS <fs> TYPE rec_type.
DO 100000 TIMES.
       APPEND wa TO itab.
ENDDO.
LOOP AT itab ASSIGNING. " pointer
     <fs>-count = sy-tabix. " 修改内表 itab
    <fs>-string = 'x'. " 不需要用 MODIFY

ENDLOOP.
相关推荐
阿湯哥4 分钟前
Reactor响应式编程中Flux和FluxSink
运维·服务器·网络
桌面运维家10 分钟前
vDisk考场环境网络瓶颈怎么定位?快速排查指南
运维·服务器·网络
Cisco_hw_zte14 分钟前
挂载大容量磁盘【Linux系统】
linux·运维·服务器
腾科IT教育21 分钟前
华为认证报考常见问题解析
运维·服务器·华为认证·hcia
_运维那些事儿23 分钟前
GitLabCI-CD入门
运维·ci/cd·容器·云计算·k8s·运维开发
杜子不疼.25 分钟前
【Linux】Ext系列文件系统(一):文件系统的初识
linux·运维·服务器
zhangzeyuaaa25 分钟前
SQL Server删除重复数据
运维·sqlserver
2401_8658548844 分钟前
轻量型服务器和云服务器的区别
运维·服务器
wypywyp1 小时前
6.linux环境优化——vscdoe ssh mobaxterm
linux·运维·ssh
腾科IT教育1 小时前
HCIE-Datacom 认证的主要内容有哪些
运维·网络·华为认证·hcie·hcie考试·it考试