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.
相关推荐
斑马13910 小时前
Linux软件编程学习笔记(四)——进程
linux·运维·服务器
扛枪的书生10 小时前
Linux 三剑客 - Awk 命令指南
linux·运维
MaximusCoder11 小时前
等保测评命令——weblogic
运维·安全·安全威胁分析
学linux的QQ蛋11 小时前
Linux 文件 IO vs 标准 IO:缓冲区、目录操作、常用函数汇总
linux·运维·服务器
苍狗T12 小时前
k8s 控制器管理
linux·运维·云原生·容器·kubernetes
笨笨饿12 小时前
#121_图传中的H.364编码与MP4的联系
linux·运维·前端·单片机·嵌入式硬件·面试·职场和发展
运维糕手12 小时前
一次 EVS"disk doesn't exist"报错的完整排查:我差点删掉生产Kafka
运维
优化Henry12 小时前
5G站点BBU功能模块集成化与偶发案例
运维·网络·学习·5g·tdd
小HANN13 小时前
高可用架构实战:Keepalived+LVS(DR)+MariaDB主主集群搭建指南
linux·运维·服务器·经验分享
Sylvia-girl13 小时前
【一】:Linux基础指令
linux·运维·服务器