1. 这两个IF ELSE分支里检测的条件其实逻辑上来说都是同一类,应该合并到一个IF分支里进行检查:

It is an expensive operation to open a file in application server with 50MB file size.

Current logic is:

1. Open the file in application server

2. Read the file content line by line

3. If the file is regarding IPG or MIDH or TPG, handle with each line separately

The correct logic should be:

1. Check the file path whether it is IPG or MIDH or TPG related. If not, quit the report.

2. Handle with each line directly without evaluate file path in the BIG loop.

The validation logic for input records should be improved

Loop at all service BOM, check whether the ID in current loop does exist in validation table lt_valid_prod or lt_valid_sp. If so, delete them via DELETE TABLE XXX FROM .

Improvement: use DELETE XXX WHERE product_id NOT IN . It is more efficient when lt_srv_bom_file has a huge number of records. See comparison below ( unit: second )

这是一个性能问题。使用ABAP原生支持的NOT IN关键字可以获得更好的性能。性能评测如下:

Avoid using SELECT to access table with a large number of entries

In product / IObject area, the best practice is to use OPEN CURSOR / FETCH NEXT CURSOR to access big DB table.

如果需要用ABAP OPEN SQL读取一张包含海量记录的数据库表,那么推荐使用OPEN CURSOR进行分块读取。

Although this solution will spend almost the same time to fetch the data from DB, it has far less memory consumption compared with using SELECT to fetch ALL data from DB at one time.

The original dump due to out of memory issue could be eliminated by replace SELECT with OPEN CURSOR statement.

这种方式和直接用SELECT相比,能显著减少内存消耗量。

使用并发编程提高应用程序场景

通过下面这段代码模拟一个费时的ABAP程序:

定义一个ABAP函数:

这个函数里执行一大堆计算,然后把传入的product ID写到一张自定义表ZJERRY1里。

调用这个函数的代码:

注意第二种方案使用STARTING NEW TASK达到的并发执行效果:

通过比较,第二种解决方案的效率是第一种的四倍。

1. The more CPU & DB time spent in ZINSERT, the better performance will be gained by using

parallel processing (Asynchronous RFC call).

2. The more number of ZINSERT call, the better performance will be gained by using parallel

processing.

要获取更多Jerry的原创文章,请关注公众号"汪子熙":

一些通过SAP ABAP代码审查得出的ABAP编程最佳实践的更多相关文章

  1. 长期内部推荐SAP职位,包括Java ABAP 咨询顾问,Developer,架构师等。

    长期内部推荐SAP职位,包括Java ABAP 咨询顾问,Developer,架构师等. 有需要请发简历到邮箱    LoB Position LocationAcquisitions Hybris ...

  2. SAP 产品条码WMS结合 以及ABAP script的集成 BarCode

    条码和RFID打印解决方案   1, 热转印条码标签打印 热转打印技术的原理是通过加温和加压将色带上的固体油墨熔化转印到介质上完成打印的.通过选择热转印色带与标签材料匹配,热转印打印方式可以产生耐高温 ...

  3. 一步步用ABAP Development Tools连接SAP云平台上的ABAP编程环境

    使用ABAP Development Tools的项目创建向导: New->ABAP Cloud Project: Service Instance Connection,选择SAP Cloud ...

  4. 【ABAP系列】SAP ABAP 高级业务应用程序编程(ABAP)

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 高级业务应用程 ...

  5. 【ABAP CDS系列】ABAP CDS中的系统信息

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP CDS系列]ABAP CDS中的系统 ...

  6. SmartbBear给出的11条代码审查最佳实践

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:SmartbBear给出的11条代码审查最佳实践.

  7. OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(上)

    这篇博文难产了很久,原来是打算一周更新一篇的,上周原计划写MVC,但是写了一半,发现带入了太多的细节,不太符合这个入门系列的主题. 当我们学习一个新的技能的时候,如果一开始就面对大量的细节,很容易陷入 ...

  8. OPEN(SAP) UI5 学习入门系列之二: 最佳实践练习(下)

    上期我们完成了一个简单的主从页面,但是页面是静态的,不能交互,功能也很简单,只有一个销售订单的列表. 我们今天就一鼓作气把代码全都写完,由于本次的代码量较大,所以只对重点代码部分进行讲解. 具体每个文 ...

  9. [SAP ABAP开发技术总结]ABAP程序之间数据共享与传递

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

随机推荐

  1. 关于echart没有数据显示暂无数据

    对于echart当没有数据的时候怎么显示, 首先,如果你的series的值为空值的话,曲线将是一片空白,什么都不会有,所以在这里就要进行一个判断,如果没有值的话,人为的添加一个键 if(Object. ...

  2. 阿里云两台服务器之间拷贝文件命令scp

    参考:云栖社区 不同的Linux之间copy文件通常有4种方法 1.ftp 2.samba服务 3.sftp 4.scp 最简单的方法就是scp,可以理解为ssh管道下的cp命令 把当前一个文件cop ...

  3. 第2天:JavaScript基础(运算符、案例、循环、冒泡以及prompt提示输入框)

    一元运算在前在后的区别 加加 var num1 = 10; //++在后面 先参与运算 再自加1 var sum1 = num1++ +10; console.log("sum1的值:&qu ...

  4. HOST文件配置

    HOST文件配置位置:C:\Windows\System32\drivers\etc\HOSTS 127.0.0.1 localhost 127.0.0.1 app.weilan.com 127.0. ...

  5. 给div加上padding和border,如何不让div整体改变

    最近要入门H5,遇到很多困惑,所以,每解决一个,我就要写在博客里,以防忘记! 给div加上padding和border,如何不让div整体改变? 如果想要实现这样的效果,只需要在这个div块中写入 b ...

  6. Jquery trigger 与 triggerHandler

    secying Jquery trigger与triggerHandler trigger: 在每一个匹配的元素上触发某类事件(即触发jQuery对象集合中每一个元素). 这个函数也会导致浏览器同名的 ...

  7. 洛谷P3952 时间复杂度(模拟)

    题意 题目链接 Sol 咕了一年的题解..就是个模拟吧 考场上写的递归也是醉了... 感觉一年自己进步了不少啊..面向数据编程的能力提高了不少 #include<bits/stdc++.h> ...

  8. Python入门-初始函数

    今天让我们来初步认识一个在python中非常重要的组成部分:函数 首先,让我们来幻想这样一个场景: 比如说我们现在想要通过社交软件约一个妹子,步骤都有什么? print('打开手机 ') print( ...

  9. 关于zepto 选择特定值的input 报错问题

    zepto 选择特定值的input  时,需要用单引号或双引号引用这个特定值 否则 报错

  10. VMWARE错误-"VirtualInfrastructure.Utils.ClientsXml"的类型初始值设定项引发异常

    异常信息:"VirtualInfrastructure.Utils.ClientsXml"的类型初始值设定项引发异常. 解决方案:以管理员的身份运行客户程序