ABAP 泛型处理的overhead - generic programming

简介: Sent: Friday, 29 January, 2016 8:17 PM

Attachment 的metadata里定义的data type和runtime时的data type不一样

Metadata里是这个structure:

image.png

image.png

Runtime变成了这个:

这些BPID和file_size 是runtime 生成的?这个structure里header_guid也没了。

image.png

Attachment和其他四个节点不太一样。


当用新的service url访问时,https://lag3:44354/sap/opu/odata/sap/CRM_ODATA/TaskCollection


动态生成的structure是BP 定义的common structure,如下:


image.png

用老的service url:https://ldag3:44354/sap/opu/odata/sap/CRM_TASK/Tasks?$filter

则动态生成的structure是我们task自己的attachment structure。

image.png

优化后的代码需要能够同时handle 这两种情况。有两种办法。

方法1:如果line 15 ASSIGN失败,说明当前的internal table类型是BP定义的。

image.png

其实就是通过line 17设置的标志位,如果是BP的structure,就用BP的field symbol接,否则用task 的field symbol接。

image.png

这种方法好处是速度比较快,因为只有1处泛型处理。缺点是在代码里出现了BP的structure crmt_bp_odata_attachment_t.


方法2:这种办法从直接上能发现不需要引入对BP structure的依赖,代码里只需要我们自己的attachment structure。


a. 在line 10~11 动态assign一个field symbol


image.png

b. 其目的是line 23用来接真实的attachment数据,然后line 24写回到result container里去。

注意这里line 24的两个field symbol都是完全generic的,而且赋值在LOOP里完成,所以方法2的泛型处理次数为 1 + task个数。


image.png

image.png

所有高级语言的guideline都说尽量避免泛型处理,除非没其他办法。那这两种办法性能有多少差异?因为Zclass里attachment 都是hard code的,所以比较的性能差异其实就是泛型处理的overhead。

当处理10个task时,相差300微秒

image.png

100个task:方法1就比方法2快1倍了

image.png

500个task:

image.png

1000个task:

image.png

1万个task:

这时差距就甩开了,方法2所有操作都是在memory里做的,居然也消耗了0.2秒。

image.png

相关文章
|
22天前
|
数据库
ABAP 泛型编程实战 - 分享一个数据库表内容的拷贝工具试读版
ABAP 泛型编程实战 - 分享一个数据库表内容的拷贝工具试读版
23 0
|
8月前
|
算法 搜索推荐 测试技术
ABAP 泛型编程(Generic Programming) 在实际工作中的一个例子
ABAP 泛型编程(Generic Programming) 在实际工作中的一个例子
66 1
|
8月前
|
SQL JSON 前端开发
SAP Restful ABAP Programming 和 HTML Over the wire 的一些对比
SAP Restful ABAP Programming 和 HTML Over the wire 的一些对比
55 0
|
9月前
|
数据库
SAP Restful ABAP Programming 编程模型的 Action 实现和云端调试介绍
SAP Restful ABAP Programming 编程模型的 Action 实现和云端调试介绍
76 0
|
9月前
|
存储 前端开发 JavaScript
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用
45 0
|
前端开发 JavaScript 数据库
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用(二)
Restful ABAP Programming 编程模式是 ABAP 这门编程语言在不断向前进化的过程中,诞生的一门新的编程模型,简称为RAP模型。
116 0
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用(二)
|
存储 数据库
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用(一)
Restful ABAP Programming 编程模式是 ABAP 这门编程语言在不断向前进化的过程中,诞生的一门新的编程模型,简称为RAP模型。
153 0
如何使用 Restful ABAP Programming 编程模型开发一个支持增删改查的 Fiori 应用(一)
|
JavaScript Java 数据安全/隐私保护
如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
Jerry之前的文章30分钟用Restful ABAP Programming模型开发一个支持增删改查的Fiori应用 发布之后,有朋友问我,“没错, 我是在你的文章里看到了Fiori应用的界面,可是这个Fiori应用的源代码我在SAP云平台上什么地方能看到呢?这个Fiori应用部署之后的状态,我在哪里能够查看呢?”
74 0
如何基于Restful ABAP Programming模型开发并部署一个支持增删改查的Fiori应用
|
安全
ABAP动态编程的性能开销 - Overhead of ABAP dynamic programming
In Mytask offline performance improvement, it is necessary to support both two DDIC structure modelled in BP and Task, that is, crmt_odata_attachment_t and crmt_bp_odata_attachment_t. It is unknown which data type will be used since they are determined by runtime according to different urls passed f
173 0
ABAP动态编程的性能开销 - Overhead of ABAP dynamic programming
|
22天前
|
前端开发 开发工具 Android开发
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版
24 0
小技巧分享 - 使用 Visual Studio Code 查看和修改 ABAP 代码试读版