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.
相关推荐
大模型丫丫几秒前
GitHub Actions 自动化运维实战:从 CI/CD 到云端部署
运维·自动化·github
山海鲸可视化10 分钟前
数字孪生技术:创新性破解城市高温难题
大数据·运维·数字孪生·数据可视化·可视化大屏
XR风云12 分钟前
docker buildx 忽略容器镜像服务的证书校验的方法
运维·docker·容器
去伪存真202518 分钟前
数字工厂与产线孪生的平台能力深度拆解
大数据·运维·人工智能·机器人
闲云自留地1 小时前
课后作业-20260806-Linux iSCSI服务器
linux·运维·服务器
风雨_831 小时前
轻量级 Nginx 日志分析和可视化平台 NginxPulse安装
运维·nginx
智购科技智能售货柜1 小时前
自动售货机商品识别YOLO模型训练实战:从6万张图片到98%识别率的完整复盘~YH
运维·服务器·数据库·人工智能·redis·物联网·yolo
X1A0RAN1 小时前
自动化流水线提效·宏观篇:5 大提效方向实战
运维·自动化
胖大和尚2 小时前
网页访问服务器,只有粘贴板可用
运维·服务器
zhang133830890752 小时前
CG-85D 水工大坝渗压监测振弦式传感器
运维·服务器·网络·人工智能·自动化