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.
相关推荐
踏浪无痕5 小时前
夜莺告警引擎内核:一个优雅的设计
运维·后端·go
爱吃生蚝的于勒5 小时前
【Linux】深入理解软硬链接
linux·运维·服务器·c语言·数据结构·c++·算法
程序终结者5 小时前
CDH6.3.2集群docker容器化离线部署客户端parcel+配置全流程详解
运维·docker·容器
全栈工程师修炼指南5 小时前
Nginx | HTTP 反向代理:当缓存失效时如何减轻后端(上游)服务压力?
运维·网络协议·nginx·http·缓存
prettyxian5 小时前
【Linux】内核编织术:task_struct的动态网络
linux·运维·服务器
Danileaf_Guo5 小时前
OSPF路由引入的陷阱:为何Ubuntu上静态路由神秘消失?深挖FRR路由分类机制
linux·运维·网络·ubuntu·智能路由器
张某人的胡思乱想5 小时前
windows远程ubuntu
linux·运维·ubuntu
QT 小鲜肉5 小时前
【Linux命令大全】001.文件管理之mtoolstest命令(实操篇)
linux·运维·前端·笔记·microsoft
iconball5 小时前
个人用云计算学习笔记 --30 华为云存储云服务
运维·笔记·学习·华为云·云计算
catchadmin5 小时前
前后端分离框架 CatchAdmin V5 beta.2 发布 插件化与开发效率的进一步提升
运维·服务器