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相关推荐

  1. C++——OOP(Object-Oriented Programming) vs. GP(Generic Programming)

    采用GP: Containers 和 Algorithms 团队可各自闭门造车,其间以 Iterator 即可连通. Algorithms 通过 Iterators 确定操作范围,并通过 Iterat ...

  2. (P72)stl(一):泛型程序设计,什么是STL,STL六大组件及其关系

    文章目录 1.泛型程序设计 2.什么是STL 3.STL六大组件及其关系 1.泛型程序设计 泛型编程(generic programming) 类属编程 将程序写得尽可能通用 将算法从数据结构中抽象出 ...

  3. C++基础知识学习笔记

    基本语法 C面向过程思想:程序=(数据结构)+(算法)  数据结构与算法分离,以算法(函数)为主. C++面向对象思想:程序=(数据结构+算法)  数据结构(属性)与算法(操作)绑成一个类,定义一个个 ...

  4. STL6大标准库的关系和作用

    STL六大组件简介 1.容器(Containers):各种数据结构,如Vector,List,Deque,Set,Map,用来存放数据,STL容器是一种Class Template,就体积而言,这一部 ...

  5. c++中algorithm头文件、STL库简介及使用说明

    c++中algorithm头文件.STL库简介及使用说明 c++中algorithm头文件是STL的算法部分,里边定义了各种算法,比如sort之类的.加上algorithm就可以使用stl库里的各种算 ...

  6. 我对STL的一些看法(一)初步认识STL

    后面一段时间我将会给大家分享我自己学到STL以及应用的时候遇到的问题还有他的一些精髓,可能开始的逻辑会有些乱吧,不过后面还会不断的整理和优化,让自己看明白也让更多的读者看的清楚. 最近刚闲下来,先说说 ...

  7. C Runtime Library 与 STL

    C Runtime Library 的来历 msvcrt.dll (名称:Microsoft C Runtime Library)提供了printf,malloc,strcpy等C语言库函数,并且为使 ...

  8. c++中STL库 简介 及 使用说明

    致谢:http://www.cppblog.com/bhjjkg/articles/94514.html 该文章讲的很清楚! 作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的 ...

  9. 轻轻松松学习C++ 标准模板库STL

    作为C++标准不可缺少的一部分,STL应该是渗透在C++程序的角角落落里的.STL不是实验室里的宠儿,也不是程序员桌上的摆设,她的激动人心并非昙花一现.本教程旨在传播和普及STL的基础知识,若能借此机 ...

最新文章

  1. python计算文件中字母出现次数_python – 计算文本文件中字母的频率
  2. NSStirng、NSArray、以及枚举(Method小集合)
  3. 清除vc6工程中的vss
  4. phpcmsV9中的CSS_PATH是如何定义的
  5. 数据库工作笔记007---mysql查询数据库中共有多少表
  6. Illustrator2020中文版教程,如何在AI中使用蒙版来裁剪内容?
  7. mysql 拷贝权限_mysql复制表的三种方法+grant三类权限说明
  8. NLP-文本分类(2)
  9. 富士施乐3300打印机驱动安装说明
  10. kafka的Leader选举机制
  11. 小浩编程:指针函数和函数指针
  12. pygame小项目 ~ 3 :Python完成简易飞机大战
  13. 拼多多店群玩法赚钱吗?精细化玩法怎么操作
  14. iframe嵌套微信公众号文章
  15. 用少量箭射爆气球,leetcode习题
  16. http请求头有哪些?
  17. 三菱FX3U PLC模拟量输出FB (FX2N-4DA)
  18. python服务启动调试的时候报错:SyntaxError: (“Non-ASCII character ‘\\xca‘ in file......解决办法
  19. 博客摘录「 idea中热部署插件JRebel最新激活方式」2023年4月15日
  20. 百度技术沙龙:如何设计优良的日志分析系统

热门文章

  1. stl_alloc.h分配器
  2. iphone自定义铃声
  3. T-SQL with as 关键字
  4. sklearn自学指南(part35)--近邻传播及均值漂移
  5. Django从理论到实战(part43)--HttpResponse对象
  6. Django从理论到实战(part10)--URL命名与反转
  7. 一行 Python 代码轻松构建树状热力图
  8. 利用Python实现用户群组分析!
  9. 如何将SAP API Hub 上提供的工作流导入到 SAP BTP 上
  10. 介绍一个 Windows 10 清理右键菜单和新建菜单的小工具 ContextMenuManager