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.
相关推荐
zhanghaofaowhrql3 小时前
Cursor+GitOps:自动化运维新姿势
运维·自动化
weixin_471383035 小时前
Docker - 05 - 构建流程
运维·docker·容器
夏玉林的学习之路6 小时前
如何远程连接服务器
运维·服务器
风曦Kisaki6 小时前
#Linux数据库管理Day06:主从同步与MaxScale读写分离
linux·运维·数据库
Tipriest_8 小时前
ubuntu创建和更换当前swap大小
linux·运维·ubuntu
雨辰AI8 小时前
生产级实战:人大金仓 V9 标准化运维手册(日常巡检 + 监控告警 + 应急处置)
java·运维·数据库·后端
ejinxian8 小时前
微虚拟机 smolvm 与Docker 容器比较
运维·docker·容器·smolvm
ShiXZ2138 小时前
PDF-OCR文件识别篇(八):配置、运维与排错
java·运维·ocr·dubbo·springboot
爱码少年9 小时前
Docker如何一次查看多个容器日志
运维·docker·容器
WI8LbH7889 小时前
Ubuntu 部署Harbor
linux·运维·ubuntu