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.
相关推荐
航Hang*31 分钟前
第六章:网络系统建设与运维(高级)—— STP生成树协议
运维·服务器·网络·笔记·ensp
最贪吃的虎38 分钟前
Java基础之泛型
java·运维·jvm·分布式·后端
2501_946675641 小时前
Flutter与OpenHarmony打卡动画效果组件
运维·nginx·flutter
softshow10261 小时前
三菱模拟器通信说明
运维
dajun1811234562 小时前
智能体在复杂工作流中的角色分配
大数据·运维·人工智能
陌路202 小时前
操作系统(15)--进程与线程
linux·运维·服务器
航Hang*2 小时前
第八章:网络系统建设与运维(高级)—— 服务质量
运维·服务器·网络·笔记·ensp
QT 小鲜肉2 小时前
【Linux命令大全】002.文件传输之ftpwho命令(实操篇)
linux·运维·服务器·网络·chrome·笔记
应用市场2 小时前
Linux进程调度与多核CPU深度解析——从内核调度器到实战优化
linux·运维·服务器
帝落若烟2 小时前
ubuntu安装禅道
linux·运维·ubuntu