'MOVE TO' 与 x = y 之间是否有任何性能提升?我有一个非常旧的程序正在优化,我想知道是否值得将所有 MOVE TO 取出。任何其他关于 ABAP 优化的一般技巧也会很棒。
8 回答
不,这只是以两种不同方式表达的相同操作。那里没有任何收获。如果您不希望获得一般提示,那么我建议您详细阅读一本好书。如果您必须优化特定程序,请使用跟踪工具(SAT
最新版本中的事务)。
不,它们是一样的。
以下是我多年的性能提升中的一些快速提示:
1)如果您尽可能使用移动对应,您的代码可以更加简洁、模块化和可扩展(在遥远的过去,这是不受欢迎的,但技术原因通常不再适用)。
2)一有机会就使用SAT,并确保打开内部表格跟踪。这就像打开灯而不是在黑暗中绊倒家具。
3)让数据库层为你做尽可能多的工作。尽可能尝试组合查询,尤其是在组合结果集时。通过连接链接的两个查询通常比 select > itab > select FOR ALL ENTRIES 好得多。
4) 这有点高级,但 FOR ALL ENTRIES 的性能通常比等效的 select-options IN 短语慢得多。这似乎是因为后者是作为对数据库层的一个大查询而构建的,而前者需要多次访问数据库层。当然,需要注意的是,如果您的选择选项中有太多记录,则在数据库层生成的查询将超过系统允许的大小,但在该限制内可能会获得很大的性能提升。一般来说,SAP 只喜欢选择选项。
5)索引,索引,索引!
首先,移动并没有真正影响太多性能。
在我工作的项目中影响很大的是:
嵌套循环(非常邪恶)。例如,循环遍历所有文档,并为每个文档选择单个以检查它是否允许显示公司代码。取而代之的是,列出公司代码,从 db 中查询一次,然后查询此结果表。
尽可能使用哈希表或排序表。在不可能的情况下,使用标准表,但按键排序并使用“二进制搜索”。
按所有关键字段从数据库中选择。如果不可能,请考虑创建索引。对于小而简单的选择,请使用连接。对于更大的选择,使用连接仍然会更快,但很难跟进。
小事 - 使用字段符号读取表格行,这使它更快。
1) 在 ABAP 语言中使用 SELECT 语句时应该小心。不必要的数据库连接会显着降低ABAP 程序的性能。
2)在使用带有函数的内部表时,您应该通过引用来调用它以减少内存使用。
引用调用:传递一个指向内存位置的指针。对子程序内的变量所做的更改会影响子程序外的变量。
3) 不应将内部表与工作区一起使用。
4)在使用嵌套循环时,使用排序算法。
它们是相同的,ADD
关键字和+
运算符也是如此。
如果您确实想优化 ABAP,我发现最大的罪魁祸首是:
未正确使用二进制查找和/或(内部)表键。ABAP 的语法在使用表时是脑死的。知道如何有效地使用表格。基本上写出更好/最优/优雅的高级代码。这永远是赢家!
更少的指令==更少的时间。您点击的指令越少,程序运行的速度就越快。这在紧密循环中很重要……我知道这听起来很明显,但 ABAP 太慢了,如果你真的想优化关键程序,这会有所作为。(我们有运行数天的流程……缩短一个小时左右会有所不同!)
不要混合类型。一些隐式转换有一些开销......例如,如果您正在初始化
string
数据类型,则使用带有(反引号)引号的正确文字字符串:`literal`。这对于使用键在表中查找也很重要……使用完全匹配的数据类型。函数调用......我不能足够强调函数调用的开销......你拥有的越少越好。与真正的计算机程序员所相信的一切背道而驰,但是你有它...... ABAP 是一个特例。
循环使用
ASSIGNING
(或REF TO
- 在某些类型上稍慢),避免 INTO 像瘟疫一样。
PS:还请记住,SWITCH
语句只是美化IF
的条件......因此将最常见的条件移到顶部!
您可以使用 ADT Eclipse 创建 CDS。或者视图(se11)具有良好的选择性能。
"MOVE a TO" b 和 "a = b" 在 ABAP 中是一样的。没有性能差异“MOVE”只是一个更明显、更引人注目的版本。
但是,如果您谈论“MOVE-CORRESPONDING”,是的,存在性能差异。编码更实用,但实际上运行速度比直接移动要慢。