[SAP ABAP开发技术总结]ABAP调优——代码优化

目录导航

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!
原文出自:

11.2.     程序

1.   READ TABLE ...WITH [TABLE] KEY...BINARY SEARCH读取标准内表使用二分查找

2.   在循环(LOOP AT ...WHERE..)或查询(READ TABLE ...)某内表时,如果未使用索引(排序表、哈希表)或二分查找,则在查询组合字段创建第二索引,查询时通过USE KEY或WITH [TABLE] KEY选项使用第二索引,这样在查询时会自动进行二分查找或哈希找查

在没有用二分查找的情况下,可在查询组合字段上创建第二索引(哈希或排序索引),则在读取或循环内表时会自动使用二分查找或哈希查找算法

3.   查找时,优先考虑使用哈希表进行查找,再考虑使用排序表进行二分查找,因为哈希查找的时间复杂度为(O (1)),不会因数据的增加而受到影响;而二分查找虽然比顺序搜索快很多,但随着数据的增加会慢下来,其时间复杂度为(O (log2n));标准内表的时间复杂度为O(n)。注:如果只使用到部分关键字为搜索条件,哈希表则会全表扫描,此时应该使用二分找查

4.   FOR ALL ENTRIES:需要判断内表是否为空,否则会查询出所有数据

5.   LOOPATitab... ASSIGNING ...、READTABLE...ASSIGNING ... 在循环或读取内表时,使用字段符号来替换表工作区,将数据分配给字段符号Field Symbols,减少数据来回传递

6.   尽量避免嵌套循环,如必须时,将循环次数少的放在外层,次数多的放在内层,这样可以减少在不同循环层之间的频繁地切换及内部循环次数

7.   条件语句中多使用短路与或,“与”连接时将为假的机率大的条件放在前面,“或”连接时将为真的机率大的条件放在前面

8.   少使用递归算法,递归时会增加调用栈层次,降低了性能,可使用队列或栈来避免递归

9.   尽量不要使用通用类型(如FIELD-SYMBOLS、及形式参数),使用具体限定类型;比较时尽量使用同一数据类型:IF c = c.比IF i = c.快,原因是未发生类型转换

10.不要使用混合类型进行计算与比较,除非有必须

11.尽量使用静态语句,少用动态编程,动态编辑虽然灵活,但性能有所下降

12.在对字符进行操作进,尽量使用String代替C固定长度类型,如:concatenate[k?n?kat?ne?t]语句对固定长度的C连接时,会去扫描那些非空字符出来再进行连接,速度没有String快

13.READ/MODIFY TABLE时使用TRANSPORTING只读取或修改必要的字段 [træns?p?:t]

14.尽量避免使用MOVE-CORRESPONDINGSELECT...INTO CORRESPONDING FIELDS OF[TABLE](SELECT时,查询几个字段就定义具有这几个字段的内表,而不是直接使用基于数据库表类型创建的内表,否则如果直接使用 INTO TABLE语法检查时会警告,但结果是没有问题的)。CORRESPONDING语句在系统内部存在隐式操作: 逐个字段的检查元素名称匹配; 检查元素类型匹配;元素类型转换[?k?ris?p?ndi?] 

15.最好不要向排序内表中插入(INSERT ... INTO TABLE ...)数据,因为在插入时会进行排序,速度会随着数据量的增加而慢下来,所以最好只向标准内表或哈希表中插入数据

16.将某个内表中的全部记录或部分记录追加到另一内表时,使用INSERT/APPEND LINES OF … 代替循环逐条追加;如果是全新赋值,直接对内表使用“=”进行赋值操作即可

17.调用类方法要快于Function

Calling Methods of global Classes:    call method CL_PERFORMANCE_TEST=>M1.

Calling Function Modules:         call function ‘FUNCTION1‘.

18.通过运行事务代码SLIN(或者直接通过SE38的菜单),进行代码静态检查,根据SAP提供的反馈信息,优化代码

19.      通过老式方式定义内表时,使用OCCURS0 而非OCCURS n :[??k?:s]  重现

l  OCCURS n 代表初始化内表的空间大小为n(空间固定),当内表存储记录条数超出n时,系统将依靠页面文件存放超出部分的数据。 当系统内存资源十分紧缺的时候, 我们可以使用OCCURS n的初始化方法, 但是这样的效率稍微慢

l  OCCURS 0 代表初始化内表的空间大小为无限,当内表存储记录条数不断增加时, 内表所使用的内存空间不断扩大, 直到系统无法分配为止。 使用内存比使用页面交换更快一些, 但是要考虑系统的资源状态

20.使用完成后及时清空释放内表所占用的空间:FREE <itab>.

21.使用CASE…WHEN语句代替 IF…ELSEIF…;使用WHILE…ENDWHILE 代替 DO…ENDDO

22.LOOP循环内表时加上Where条件减少CPU负荷,而不是在循环里通过IF语句来过滤数据

时间: 2024-11-10 01:38:18

[SAP ABAP开发技术总结]ABAP调优——代码优化的相关文章

[SAP ABAP开发技术总结]ABAP调优——Open SQL优化

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 11.1.     数据库编程方面优化 1.   不要使用 SELECT * ...,选择需要的字段, SELECT * 既浪费CPU,又浪费网络带宽资源,还需占用大量的ABAP内存 2.   不要使用SELECT DISTINCT ...,会绕过缓存,可使用 SORT BY + DELETE ADJACENT DUPLICATES 代替 3.   少用相关子查询,因为子

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

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 19.             数据共享与传递... 222 19.1.         程序调用.会话.SAP/ABAP内存 关系... 222 19.2.         ABAP Memory数据共享... 224 19.2.1.     EXPORT. 224 19.2.2.     IMPORT. 226 19.2.3.     DELETE. 227 19.3

[SAP ABAP开发技术总结]ABAP读取写XML文件

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 20.6.         XML. 236 20.6.1.     生成... 237 20.6.2.     解析... 240 20.6.     XML if_ixml if_ixml_documentif_ixml_node if_ixml_element if_ixml_istream if_ixml_ostream document.element.ATTR

[SAP ABAP开发技术总结]ABAP常用事务码

声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: SE16N 业务顾问表数据查询工具  日志分析 SM13:查看Update Table更新(当使用V3更新时)  入站处理代码 CS11逐层显示BOM CS12 多层显示BOM ME11创建采购信息记录,类似销售里的条件记录VK11, 物料号+采购组织+供应商+工厂(可选)决定一条 Info Record MIGO 入库.收货 MMBE 按公司.工厂.库位.批次,库存分类汇总显示

ABAP开发顾问必备:SAP ABAP开发技术总结

声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将追究法律责任!原文链接:http://www.cnblogs.com/jiangzhengjun/p/4260224.html 该文档是根据我过去多年学习文档与工作文档总结而成,项目开发过程中我都会参考此文档,主要ABAP很多细节上的东西不可能你记得很牢固,或者你记得一时,但过不了几天做别的项目就会

iOS开发25个性能调优技巧

1. 用ARC管理内存 ARC(Automatic Reference Counting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你管理retain和release的过程,所以你就不必去手动干预了. 下面是你会经常用来去创建一个View的代码段: 1 2 3 4 UIView *view = [[UIView alloc] init];  // ...  [self.view addSubview:view];  [view 

[SAP ABAP开发技术总结]BAPI调用

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 18.3.2.5.           调用BAPI 199 18.3.2.5.1.       BAPI事务处理... 200 18.3.2.5.2.       外部系统(Java)调用BAPI函数... 201 18.3.2.5.2.1.    直连.连接池... 201 18.3.2.5.2.2.    访问结构... 202 18.3.2.5.2.3.    访

[SAP ABAP开发技术总结]消息处理Messages

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 14.             Messages. 115 14.1.         00消息ID中的通用消息... 115 14.2.         消息常量... 116 14.3.         静态指定... 116 14.4.         动态指定... 116 14.5.         消息拼接MESSAGE …INTO.. 116 14.6.  

[SAP ABAP开发技术总结]IDoc

目录导航 声明:原创作品,转载时请注明文章来自SAP师太博客,并以超链接形式标明文章原始出处,否则将追究法律责任!原文出自: 18.4.         IDoc. 206 18.4.1.     数据段类型和数据段定义(WE31)... 206 18.4.2.     IDoc定义(WE30)... 207 18.4.3.     自定义IDoc发送与接收实例... 208 18.4.3.1.           发送端800(outbound)配置... 208 1.创建segment(WE