ABAP 泛型处理的overhead - generic programming
Sent: Friday, 29 January, 2016 8:17 PM
Attachment 的metadata里定义的data type和runtime时的data type不一样
Metadata里是这个structure:
Runtime变成了这个:
这些BPID和file_size 是runtime 生成的?这个structure里header_guid也没了。
Attachment和其他四个节点不太一样。
当用新的service url访问时,https://lag3:44354/sap/opu/odata/sap/CRM_ODATA/TaskCollection
动态生成的structure是BP 定义的common structure,如下:
用老的service url:https://ldag3:44354/sap/opu/odata/sap/CRM_TASK/Tasks?$filter
则动态生成的structure是我们task自己的attachment structure。
优化后的代码需要能够同时handle 这两种情况。有两种办法。
方法1:如果line 15 ASSIGN失败,说明当前的internal table类型是BP定义的。
其实就是通过line 17设置的标志位,如果是BP的structure,就用BP的field symbol接,否则用task 的field symbol接。
这种方法好处是速度比较快,因为只有1处泛型处理。缺点是在代码里出现了BP的structure crmt_bp_odata_attachment_t.
方法2:这种办法从直接上能发现不需要引入对BP structure的依赖,代码里只需要我们自己的attachment structure。
a. 在line 10~11 动态assign一个field symbol
b. 其目的是line 23用来接真实的attachment数据,然后line 24写回到result container里去。
注意这里line 24的两个field symbol都是完全generic的,而且赋值在LOOP里完成,所以方法2的泛型处理次数为 1 + task个数。
所有高级语言的guideline都说尽量避免泛型处理,除非没其他办法。那这两种办法性能有多少差异?因为Zclass里attachment 都是hard code的,所以比较的性能差异其实就是泛型处理的overhead。
当处理10个task时,相差300微秒
100个task:方法1就比方法2快1倍了
500个task:
1000个task:
1万个task:
这时差距就甩开了,方法2所有操作都是在memory里做的,居然也消耗了0.2秒。
鉴于我们offline的use case,1千个task都算相当大的数据量了,这种情况下方法2消耗的绝对时间仍然不大,所以最后我决定采用方法2.
要获取更多Jerry的原创文章,请关注公众号"汪子熙":
ABAP 泛型处理的overhead - generic programming相关推荐
- C++——OOP(Object-Oriented Programming) vs. GP(Generic Programming)
采用GP: Containers 和 Algorithms 团队可各自闭门造车,其间以 Iterator 即可连通. Algorithms 通过 Iterators 确定操作范围,并通过 Iterat ...
- (P72)stl(一):泛型程序设计,什么是STL,STL六大组件及其关系
文章目录 1.泛型程序设计 2.什么是STL 3.STL六大组件及其关系 1.泛型程序设计 泛型编程(generic programming) 类属编程 将程序写得尽可能通用 将算法从数据结构中抽象出 ...
- C++基础知识学习笔记
基本语法 C面向过程思想:程序=(数据结构)+(算法) 数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法) 数据结构(属性)与算法(操作)绑成一个类,定义一个个 ...
- STL6大标准库的关系和作用
STL六大组件简介 1.容器(Containers):各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部 ...
- c++中algorithm头文件、STL库简介及使用说明
c++中algorithm头文件.STL库简介及使用说明 c++中algorithm头文件是STL的算法部分,里边定义了各种算法,比如sort之类的.加上algorithm就可以使用stl库里的各种算 ...
- 我对STL的一些看法(一)初步认识STL
后面一段时间我将会给大家分享我自己学到STL以及应用的时候遇到的问题还有他的一些精髓,可能开始的逻辑会有些乱吧,不过后面还会不断的整理和优化,让自己看明白也让更多的读者看的清楚. 最近刚闲下来,先说说 ...
- C Runtime Library 与 STL
C Runtime Library 的来历 msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使 ...
- c++中STL库 简介 及 使用说明
致谢:http://www.cppblog.com/bhjjkg/articles/94514.html 该文章讲的很清楚! 作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的 ...
- 轻轻松松学习C++ 标准模板库STL
作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的.STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现.本教程旨在传播和普及STL的基础知识,若能借此机 ...
最新文章
- python计算文件中字母出现次数_python – 计算文本文件中字母的频率
- NSStirng、NSArray、以及枚举(Method小集合)
- 清除vc6工程中的vss
- phpcmsV9中的CSS_PATH是如何定义的
- 数据库工作笔记007---mysql查询数据库中共有多少表
- Illustrator2020中文版教程,如何在AI中使用蒙版来裁剪内容?
- mysql 拷贝权限_mysql复制表的三种方法+grant三类权限说明
- NLP-文本分类(2)
- 富士施乐3300打印机驱动安装说明
- kafka的Leader选举机制
- 小浩编程:指针函数和函数指针
- pygame小项目 ~ 3 :Python完成简易飞机大战
- 拼多多店群玩法赚钱吗?精细化玩法怎么操作
- iframe嵌套微信公众号文章
- 用少量箭射爆气球,leetcode习题
- http请求头有哪些?
- 三菱FX3U PLC模拟量输出FB (FX2N-4DA)
- python服务启动调试的时候报错:SyntaxError: (“Non-ASCII character ‘\\xca‘ in file......解决办法
- 博客摘录「 idea中热部署插件JRebel最新激活方式」2023年4月15日
- 百度技术沙龙:如何设计优良的日志分析系统
热门文章
- stl_alloc.h分配器
- iphone自定义铃声
- T-SQL with as 关键字
- sklearn自学指南(part35)--近邻传播及均值漂移
- Django从理论到实战(part43)--HttpResponse对象
- Django从理论到实战(part10)--URL命名与反转
- 一行 Python 代码轻松构建树状热力图
- 利用Python实现用户群组分析!
- 如何将SAP API Hub 上提供的工作流导入到 SAP BTP 上
- 介绍一个 Windows 10 清理右键菜单和新建菜单的小工具 ContextMenuManager