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 ...
随机推荐
- SQL 必知必会·笔记<7>汇总数据——使用聚合函数
有时候我们需要对表中的数据进行汇总,而不需要数据本身,为了方便这些类型的检索,SQL给出了5个聚合函数,SQL聚合函数在各主要的SQL实现中得到了相当一致的支持.如下: 1.1 AVG()函数 AVG ...
- C语言实现多态
C语言实现多态 首先声明,大神就不要看了.小弟水平有限. C++多态是通过虚函数表实现的,类似于JAVA多态的实现方式.关于Java多态的实现方式可以看我之前写过的一篇不是很完善的文章.从JVM角度看 ...
- React Native顶|底部导航使用小技巧
导航一直是App开发中比较重要的一个组件,ReactNative提供了两种导航组件供我们使用,分别是:NavigatorIOS和Navigator,但是前者只能用于iOS平台,后者在ReactNati ...
- 使用Asp.Net Core MVC 开发项目实践[第一篇:项目结构说明]
先从下图看整体项目结构: Mango.Manager: 为后台管理项目 Mango.Web: 为前台项目 Mango.Framework.Core: 为常用的基础操作类项目 Mango.Framewo ...
- Django之web应用、http协议和django简介
等了好久终于等到今天,盼了好久终于把梦实现,啦啦啦.....学习python两个多月了,终于等到python的高潮,老师说要是把Django学会了,python的web开发就差不多了,也相当于迎来了p ...
- NLog 配置
之前我介绍过如何使用log4net来记录日志,但最近喜欢上了另一个简单好用的日志框架NLog. 关于NLog和log4net的比较这里就不多讨论了,感兴趣的朋友可以参看.NET日志工具介绍和log4n ...
- Vue 动态加载组件
为什么要动态加载呢?而不是一次性加载呢? 一次性?你能保证你拿的内容不多,那从性能方面说还是OK的.否则,就该什么时候用,就什么时候取. 得出这想法,源于前几天上班赶产品的故事: A组件是父亲,B组件 ...
- [PHP]算法-替换空格的PHP实现
替换空格: 请实现一个函数,将一个字符串中的每个空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy. 思路: 1.先循环一遍,找出 ...
- [android] 手机卫士自定义滚动控件
TextView控件设置单行显示 android:singleLine=”true” 设置TextView开始的位置显示省略号,android:ellipsize=”start” 设置滚动属性,and ...
- LoadRunner接口测试标准模板
Action() { int nHttpRetCode; // 默认最大长度为256,get请求需注意缓存问题,需要根据content-length进行修改 web_set_max_html_para ...