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.
相关推荐
Star(up up up)11 小时前
Docker系列---Docker容器基本命令(新手小白保姆级实操教程)
运维·学习·程序人生·青少年编程·docker·容器·dubbo
echome88812 小时前
Linux 定时任务:crontab 写法与常见失效原因
linux·运维·网络·定时任务·crontab
老约家的可汗12 小时前
Linux开发三件套:make、git、gdb 入门指南
linux·运维·服务器
分布式存储与RustFS13 小时前
可观测性数据落进对象存储:Proscia 案例拆解与 ClickHouse 自托管配置
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
方便面不加香菜13 小时前
Docker Image-- 镜像命令详解与使用示例
运维·docker·容器
天远API14 小时前
零信任架构实战:基于天远劳动仲裁信息查询构建自动化灵活用工劳务派遣人员准入背调网关
运维·人工智能·架构·自动化
程序员大雄学编程14 小时前
Linux 磁盘满了怎么排查?df / du / find 三步定位大文件
linux·运维·php
Bruce_Liuxiaowei14 小时前
前端校验登录态,等于没校验——一次应急广播终端高危漏洞的发现与报送
运维·前端·安全
时间售卖铺15 小时前
Docker私有仓库搭建与实战指南
运维·docker·云原生·容器
快乐的熊二15 小时前
每天自动领积分:Trae CN + WorkBuddy 签到自动化
运维·自动化