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 ...
随机推荐
- vue-02-安装-指令
1, vue安装 1), 安装vue-cli npm install -g cnpm --registry=https://registry.npm.taobao.org 之后可以用 淘宝的npm镜像 ...
- ClickHouse之简单性能测试
前面的文章ClickHouse之初步认识已经简单的介绍了ClickHouse,接下来进行简单的性能测试.测试数据来源于美国民用航班的数据,从1987年到2017年,有1.7亿条. 环境: centos ...
- android ART hook
0x00 前言 之前一直都是在Dalvik 虚拟机上在折腾,从Android 4.4开始开始引入ART,到5.0已经成为默认选择.而且最近看到阿里开源的 Dexposed 框架,已经提供了对于andr ...
- c++中运算符重载
c++语言中运算符重载都是通过函数来实现的,所以其实质为函数重载,当c++语言原有的一个运算符被重载之后,它原来所具有的语义并没有消失,只相当于针对一个特定的类定义了一个新的运算符. <1> ...
- [转]git操作指南
[GIT上手篇]-1-基本操作(初始化仓库,添加.提交文件) 创建(初始化)一个GIT库 init 命令 说明:用于仓库的初始化 参数:--bare 创建一个纯仓库(不含缓存区和工作目录,服务器一般采 ...
- [转]angular2在运行ng serve的时候卡在95% emitting LicenseWebpackPlugin
本文转自:https://blog.csdn.net/qq919694688/article/details/80912207 放弃使用cnpm,使用yarn 1.删除node_modules (不需 ...
- php 中的sprintf 坑
先说下为什么要写这个函数的前言,这个是我在看工作中发现一处四舍五入的bug后,当时非常不理解, echo sprintf('%.2f',123.455); //123.45 echo sprintf( ...
- code for qint function
function [p,y,a] = qint(ym1,y0,yp1) %QINT - quadratic interpolation of three adjacent samples % % [p ...
- echarts环形图,自定义说明文字
一.代码 app.title = '已安装通讯盒电站统计'; option = { backgroundColor: '#0f0f31',//#0f0f31 title: { show:true, x ...
- 初学HTML-6
表单:专门用来收集用户信息 表单元素:在HTML中,标签/标记/元素都是指HTML中的标签. eg:<a>a标签/a标记/a元素 浏览器中所以得表单标签都有特殊的外观和默认的功能. 格式: ...