7

'MOVE TO' 与 x = y 之间是否有任何性能提升?我有一个非常旧的程序正在优化,我想知道是否值得将所有 MOVE TO 取出。任何其他关于 ABAP 优化的一般技巧也会很棒。

4

8 回答 8

10

不,这只是以两种不同方式表达的相同操作。那里没有任何收获。如果您不希望获得一般提示,那么我建议您详细阅读一本好书。如果您必须优化特定程序,请使用跟踪工具(SAT最新版本中的事务)。

于 2012-12-21T18:38:48.697 回答
2

这两个语句是等价的:

" 要将数据对象源的值分配给变量目标,请使用以下语句:

MOVE source TO destination.

或等效的语句

destination = source.

"

于 2012-12-21T18:38:29.193 回答
1

不,它们是一样的。

以下是我多年的性能提升中的一些快速提示:

1)如果您尽可能使用移动对应,您的代码可以更加简洁、模块化和可扩展(在遥远的过去,这是不受欢迎的,但技术原因通常不再适用)。

2)一有机会就使用SAT,并确保打开内部表格跟踪。这就像打开灯而不是在黑暗中绊倒家具。

3)让数据库层为你做尽可能多的工作。尽可能尝试组合查询,尤其是在组合结果集时。通过连接链接的两个查询通常比 select > itab > select FOR ALL ENTRIES 好得多。

4) 这有点高级,但 FOR ALL ENTRIES 的性能通常比等效的 select-options IN 短语慢得多。这似乎是因为后者是作为对数据库层的一个大查询而构建的,而前者需要多次访问数据库层。当然,需要注意的是,如果您的选择选项中有太多记录,则在数据库层生成的查询将超过系统允许的大小,但在该限制内可能会获得很大的性能提升。一般来说,SAP 只喜欢选择选项。

5)索引,索引,索引!

于 2017-02-10T16:29:30.063 回答
1

首先,移动并没有真正影响太多性能。

在我工作的项目中影响很大的是:

  1. 嵌套循环(非常邪恶)。例如,循环遍历所有文档,并为每个文档选择单个以检查它是否允许显示公司代码。取而代之的是,列出公司代码,从 db 中查询一次,然后查询此结果表。

  2. 尽可能使用哈希表或排序表。在不可能的情况下,使用标准表,但按键排序并使用“二进制搜索”。

  3. 按所有关键字段从数据库中选择。如果不可能,请考虑创建索引。对于小而简单的选择,请使用连接。对于更大的选择,使用连接仍然会更快,但很难跟进。

  4. 小事 - 使用字段符号读取表格行,这使它更快。

于 2017-02-13T12:57:42.437 回答
0

1) 在 ABAP 语言中使用 SELECT 语句时应该小心。不必要的数据库连接会显着降低ABAP 程序的性能。

2)在使用带有函数的内部表时,您应该通过引用来调用它以减少内存使用。

引用调用:传递一个指向内存位置的指针。对子程序内的变量所做的更改会影响子程序外的变量。

3) 不应将内部表与工作区一起使用。

4)在使用嵌套循环时,使用排序算法。

于 2016-06-22T13:07:06.303 回答
0

它们是相同的,ADD关键字和+运算符也是如此。

如果您确实想优化 ABAP,我发现最大的罪魁祸首是:

  • 未正确使用二进制查找和/或(内部)表键。ABAP 的语法在使用表时是脑死的。知道如何有效地使用表格。基本上写出更好/最优/优雅的高级代码。这永远是赢家!

  • 更少的指令==更少的时间。您点击的指令越少,程序运行的速度就越快。这在紧密循环中很重要……我知道这听起来很明显,但 ABAP 太慢了,如果你真的想优化关键程序,这会有所作为。(我们有运行数天的流程……缩短一个小时左右会有所不同!)

  • 不要混合类型。一些隐式转换有一些开销......例如,如果您正在初始化 string数据类型,则使用带有(反引号)引号的正确文字字符串:`literal`。这对于使用键在表中查找也很重要……使用完全匹配的数据类型。

  • 函数调用......我不能足够强调函数调用的开销......你拥有的越少越好。与真正的计算机程序员所相信的一切背道而驰,但是你有它...... ABAP 是一个特例。

  • 循环使用ASSIGNING(或REF TO- 在某些类型上稍慢),避免 INTO 像瘟疫一样。

PS:还请记住,SWITCH语句只是美化IF的条件......因此将最常见的条件移到顶部!

于 2017-01-13T15:39:10.673 回答
0

您可以使用 ADT Eclipse 创建 CDS。或者视图(se11)具有良好的选择性能。

于 2017-07-07T14:35:46.797 回答
0

"MOVE a TO" b 和 "a = b" 在 ABAP 中是一样的。没有性能差异“MOVE”只是一个更明显、更引人注目的版本。

但是,如果您谈论“MOVE-CORRESPONDING”,是的,存在性能差异。编码更实用,但实际上运行速度比直接移动要慢。

于 2019-04-08T09:32:18.370 回答