ABAP 内表访问表达式的性能
内表访问表达式是ABAP 7.4中引入的重要特性,可以使语句变得更加简洁、美观。那么它的读写性能怎么样呢?我进行了一点点测试。
读取
测试代码,使用三种方式读取同一内表,分别是read table关键字、表达式和read table...binary search:
REPORT ztest_read. DATA: BEGIN OF gs_test,
index TYPE i,
des TYPE string,
END OF gs_test.
DATA: gt_test LIKE STANDARD TABLE OF gs_test. CLASS zcl_reader DEFINITION. PUBLIC SECTION. METHODS:
constructor IMPORTING itab LIKE gt_test,
read_by_read,
read_by_exp,
read_by_binary. PRIVATE SECTION. DATA: lt_test LIKE STANDARD TABLE OF gs_test. CLASS-DATA index1 TYPE i VALUE 3769.
CLASS-DATA index2 TYPE i VALUE 5555.
ENDCLASS. CLASS zcl_reader IMPLEMENTATION. METHOD constructor. lt_test = itab.
ENDMETHOD. METHOD read_by_read. READ TABLE lt_test WITH KEY index = index1 INTO DATA(ls_test).
READ TABLE lt_test WITH KEY index = index2 INTO ls_test. ENDMETHOD. METHOD read_by_exp. DATA(ls_test) = lt_test[ index = index1 ].
ls_test = lt_test[ index = index2 ]. ENDMETHOD. METHOD read_by_binary. READ TABLE lt_test WITH KEY index = index1 INTO DATA(ls_test) BINARY SEARCH.
READ TABLE lt_test WITH KEY index = index2 INTO ls_test BINARY SEARCH. ENDMETHOD. ENDCLASS. INITIALIZATION. DATA(des) = '一个字符串'. DO TIMES. gs_test-index = gs_test-index + .
gs_test-des = des.
APPEND gs_test TO gt_test. ENDDO. DATA(gr_reader) = NEW zcl_reader( gt_test ). gr_reader->read_by_read( ).
gr_reader->read_by_exp( ).
gr_reader->read_by_binary( ).
结果:

如图,内表访问表达式在读取方面的性能和read table是一样的。所以,表达式在这里只是read table的简写方式。
修改
测试代码,分别使用modify关键字,内表访问表达式,field symbol来修改内表:
*&---------------------------------------------------------------------*
*& Report ZTEST_ITAB_MODIFY
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztest_itab_modify. DATA: BEGIN OF gs_test,
index TYPE i,
des TYPE string,
END OF gs_test.
DATA: gt_test LIKE STANDARD TABLE OF gs_test. CLASS zcl_editor DEFINITION. PUBLIC SECTION. METHODS:
constructor IMPORTING itab LIKE gt_test, modify_by_modify, modify_by_exp, modify_by_fs. PRIVATE SECTION. CLASS-DATA new_string TYPE string VALUE '喵喵喵?'. DATA: lt_test1 LIKE STANDARD TABLE OF gs_test.
DATA: lt_test2 LIKE STANDARD TABLE OF gs_test.
DATA: lt_test3 LIKE STANDARD TABLE OF gs_test. ENDCLASS.
CLASS zcl_editor IMPLEMENTATION. METHOD constructor. lt_test1 = itab.
lt_test2 = itab.
lt_test3 = itab. ENDMETHOD. METHOD modify_by_modify. DATA idx TYPE i VALUE . DO lines( lt_test1 ) TIMES. READ TABLE lt_test1 INTO DATA(ls_test) INDEX idx .
ls_test-des = new_string.
MODIFY lt_test1 FROM ls_test INDEX idx.
idx = idx + . ENDDO. ENDMETHOD. METHOD modify_by_exp. DATA idx TYPE i VALUE . DO lines( lt_test2 ) TIMES. lt_test2[ idx ]-des = new_string.
idx = idx + . ENDDO. ENDMETHOD. METHOD modify_by_fs. DATA idx TYPE i VALUE .
FIELD-SYMBOLS: <fs> LIKE gs_test. DO lines( lt_test3 ) TIMES. READ TABLE lt_test1 ASSIGNING <fs> INDEX idx .
<fs>-des = new_string.
idx = idx + . ENDDO. ENDMETHOD. ENDCLASS. INITIALIZATION. DATA(des) = '一个字符串'. DO TIMES. gs_test-index = gs_test-index + .
gs_test-des = des.
APPEND gs_test TO gt_test. ENDDO. DATA(lr_editor) = NEW zcl_editor( gt_test ). lr_editor->modify_by_modify( ).
lr_editor->modify_by_exp( ).
lr_editor->modify_by_fs( ).
结果:

可以看出,内表访问表达式在修改普通的标准表时的性能是要稍差于modify关键字的。更不如field symbol。
当然,本文中使用的例子不能代表实际业务场景,因此只可以用作参考。
ABAP 内表访问表达式的性能的更多相关文章
- Abap 内表的语法
ABAP中的内表相当于其他程序设计语言中的二维数组,存储多行结构相同的数据 不同于二维数组,内表在创建后,列结构与列数是固定不变的,而行数是动态增长的 内表支持循环对每行数据进行操作,也支持整体操作 ...
- ABAP内表数据和JSON格式互转
本程序演示ABAP内表数据如何转为JSON格式,以及JSON数据如何放入内表. 注:json字符串格式如:jsonstr = '[ {flag: "0",message: &quo ...
- ABAP 内表 详解
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- ABAP 内表数据 与 Json串 相互转换
内表: A B C IMINGZHA HAIMINGZ AIMINGZH 1 2 3 4 5 6 Json串: [{a: "IMINGZHA", b: "HAIMIN ...
- ABAP 内表(internal table) 标题行(header line) 工作区(work area) 简介 - [SAP]
刚开始学ABAP的时候,学到iternal table时,感觉一阵混乱.搞不清楚什么是work area,什么是header line,以及occurs是干什么用的.今天终于差不多搞明白了(我还是太弱 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW-(以运单号为单位显示ALV然后保存输出)
*********************************************************************** * Title : ZSDF003 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里-NEW
*********************************************************************** * Title : ZSDF002 ...
- ABAP 内表的行列转换-发货通知单-打印到Excel里
需要传入数据到Excel里的模板如上图所示 ********************** * 设计主要逻辑与原理说明 ...
- ABAP 内表的行列转换-发货通知单2
*&---------------------------------------------------------------------* *& Report Z_TEST_C ...
随机推荐
- rfc2818 --- HTTP Over TLS
协议链接 本协议描述了如何使用TLS来对Internet上的HTTP进行安全加固. 2.1. Connection Initiation(链接初始化) HTTP client同时也作为TLS clie ...
- nginx介绍(五) - 高可用
前言 即便想 nginx 这么牛B的服务器, 也不能保证他不挂啊, 就算不是机器出故障, 比如, 停电了, 那么机器挂了, 很正常啊. 这时候, 没有分发服务器, 网站就不能正常访问了, 咋搞? 网站 ...
- C语言第六讲,数组
C语言第六讲,数组 一丶什么是数组 数组,就是一整块的连续内存空间. 且类型都是一样的.大小一样 比如: 1.1数组元素的访问 我们要访问数组,例如上面,我们访问元算2,元素3等等怎么访问.. 比如有 ...
- git第八节---git 撤销和回滚
# git 撤销 1. 未添加进暂存区的撤销 --未git add 2.添加进暂存区的撤销-- 已git add 未git commit 未添加进暂存区的撤销命令:git checkout -- ...
- 使用BizTalk实现RosettaNet B2B So Easy
使用BizTalk实现RosettaNet B2B So Easy 最近完成了一个vmi-hub的B2B项目,使用Rosettanet 2.0的标准与一家品牌商,OEM,供应商实现B2B.一共交换4个 ...
- nodejs+nginx获取真实ip
nodejs + nginx获取真实ip分为两部分: 第一.配置nginx: 第二.通过nodejs代码获取: 其他语言也是一样的,都是配置nginx之后,在http头里面获取“x-forwarded ...
- Python和Java编程题(五)
题目:将一个正整数分解质因数.例如:输入90,打印出90=2*3*3*5. 程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: (1)如果这个质数恰等于n,则说明分解质因数的 ...
- ZOJ 1456 Minimum Transport Cost(Floyd算法求解最短路径并输出最小字典序路径)
题目链接: https://vjudge.net/problem/ZOJ-1456 These are N cities in Spring country. Between each pair of ...
- SpringBoot入门之基于Druid配置Mybatis多数据源
上一篇了解了Druid进行配置连接池的监控和慢sql处理,这篇了解下使用基于基于Druid配置Mybatis多数据源.SpringBoot默认配置数据库连接信息时只需设置url等属性信息就可以了,Sp ...
- 数据库和ado连接语句的使用总结
基本的sql语句 创建数据库:CREATE DATABASE database-name 删除数据库:drop database dbname 创建表:create table tabname(字段属 ...