ABAP中移动和=分配之间的性能差异

ABAP中移动和=分配之间的性能差异,abap,Abap,“移动到”与x=y之间是否有任何性能增益?我有一个非常老的计划,我正在优化,我想知道是否值得把所有的行动都付诸实施。关于ABAP优化的任何其他一般提示也很好。这两种说法是: " 要将数据对象源的值分配给变量目标,请使用以下语句: MOVE source TO destination. 或同等声明 destination = source. “不,这只是以两种不同方式表示的相同操作。没有什么好处。如果你想要一般的提示,我建议你仔细研究。如果您必须优化特定的程序,请使用跟踪工具(在最新版本中使用

“移动到”与x=y之间是否有任何性能增益?我有一个非常老的计划,我正在优化,我想知道是否值得把所有的行动都付诸实施。关于ABAP优化的任何其他一般提示也很好。

这两种说法是:

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

MOVE source TO destination.
或同等声明

destination = source.

不,这只是以两种不同方式表示的相同操作。没有什么好处。如果你想要一般的提示,我建议你仔细研究。如果您必须优化特定的程序,请使用跟踪工具(在最新版本中使用transaction
SAT

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

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

参考电话: 传递指向内存位置的指针。对 子例程中的变量影响外部变量 子程序

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


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

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

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

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

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

  • 不要混用。有一点开销的一些 隐式转换。。。例如,如果您正在初始化
    string
    数据类型,然后将正确的文字字符串与 (反勾)引号:`literal`。这也适用于在中查找 使用键的表。。。使用完全匹配的数据类型

  • 函数调用。。。我不能强调函数调用的开销 足够地你拥有的越少越好。与任何真实的事情都背道而驰 计算机程序员相信,但你有它。。。ABAP是一种 特例

  • 使用
    赋值
    (或
    REF TO
    )循环-在某些情况下稍慢 类型),避免像瘟疫一样进入

PS:还要记住,
SWITCH
语句只是美化了
IF
条件句。。。因此,将最常见的条件移至顶部

不,它们是一样的

以下是我多年来提高绩效的几点提示:

1) 如果在可能的情况下使用move-correlative,代码可以更加简洁、模块化和可扩展(在遥远的过去,这是不受欢迎的,但其技术原因通常不再适用)

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

3) 让数据库层为您做尽可能多的工作。尽可能地组合查询,尤其是在组合结果集时。对于所有条目,由联接链接的两个查询通常比选择>itab>选择要好得多

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


5) 索引,索引,索引

首先,移动并不会真正影响性能

对我工作的项目有很大影响的是:

  • 嵌套循环(非常邪恶)。例如,循环浏览所有文档,并为每个文档选择single以检查是否允许显示公司代码。 取而代之的是,列出一份公司代码清单,从db处查阅所有代码一次,然后查阅此结果表

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

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

  • 次要的事情-使用字段符号来读取表行,这使它更快


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

    “将a移动到”b和“a=b”在ABAP中完全相同。没有性能差异,“移动”只是一个更明显、更引人注目的版本

    但是如果你谈论“移动对应”,是的,有一个性能差异。编写代码更实用,但实际上运行速度比直接移动慢