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 ...
随机推荐
- Spring Boot + Spring Cloud 实现权限管理系统 后端篇(十八):注册中心(Spring Cloud Consul)
什么是 Consul Consul 是 HashiCorp 公司推出的开源工具,用于实现分布式系统的服务发现与配置.与其它分布式服务注册与发现的方案,Consul 的方案更“一站式”,内置了服务注册与 ...
- mysql中的data下的数据文件(.FRM、.MYD、.MYI)恢复为数据
记一次mysql中的data文件操作经历 想拿到一个项目的最新的数据,做功能升级使用,备份一份数据同时也作为本地测试数据,文件有些大,我直接通过远程的phpmyadmin程序导出,不能愉快的玩耍,直接 ...
- tensorflow实现循环神经网络
包括卷积神经网络(CNN)在内的各种前馈神经网络模型, 其一次前馈过程的输出只与当前输入有关与历史输入无关. 递归神经网络(Recurrent Neural Network, RNN)充分挖掘了序列数 ...
- java的四个基本特征
现实生活中的事物被抽象成对象,把具有相同属性和行为的对象被抽象成类,再从具有相同属性和行为的类中抽象出父类. 封装 隐藏对象的属性和实现细节,仅仅对外公开接口. 封装的有优点: 1.便于使用者正确.方 ...
- 关于 RESTFUL API 安全认证方式的一些总结
常用认证方式 在之前的文章REST API 安全设计指南与使用 AngularJS & NodeJS 实现基于 token 的认证应用两篇文章中,[译]web权限验证方法说明中也详细介绍,一般 ...
- 详解promise、async和await的执行顺序
1.题目和答案 一道题题目:下面这段promise.async和await代码,请问控制台打印的顺序? async function async1(){ console.log('async1 sta ...
- 7种html5css3网页图片展示特效代码
鼠标拖拽图片渐变透明切换特效 mobile手机左右滑动切换幻灯片 游戏透明提示图层幻灯片特效 可以编辑滚动条灯片颜色的scroll插件 几种文字动画显示插件代码 360度背景图片旋转的css3动画 左 ...
- React 入门学习笔记整理(六)—— 组件通信
1.父子组件通信 1)父组件与子组件通信,使用Props 父组件将name传递给子组件 <GreateH name="kitty"/> 子组件通过props接收父组件的 ...
- 使用volley上传多张图片,一个参数对应多张图片,转载
https://my.oschina.net/u/1177694/blog/491834 原帖地址 而如果使用volley的话,因为请求数据那些都很简便,但遇到上传文件就麻烦那可不好,同时使用多个网络 ...
- long数值 转换为时间
项目中,服务器端经常给客户端开发人员传一个长整形的时间数据, 对于一个 长整形 1446801883000,可以明显的看出 是以毫秒为单位的,因为最后有三个零,如果没有连续3个零的话就要判断单位了 那 ...