乐趣区

关于sap:关于-ABAP-函数调用-Pass-by-value-和-Pass-by-reference-的性能比较

ABAP(Advanced Business Application Programming)是一种高级业务利用编程语言,次要用于开发 SAP 零碎。在 ABAP 中,函数调用时的参数传递形式有两种:按值传递(pass by value)和按援用传递(pass by reference)。这两种传递形式在很多编程语言中都有利用,它们在参数传递和内存治理方面有一些重要的区别。

  1. 按值传递(pass by value):
    在按值传递中,函数调用时理论参数的值会被复制到形式参数中。这意味着函数外部对形式参数的批改不会影响到理论参数。因为参数的值是复制的,因而按值传递可能会减少内存耗费,特地是在解决大数据结构时。

在 ABAP 中,要应用按值传递,须要在参数申明中应用关键字 VALUE。例如:

FORM my_function USING VALUE(param) TYPE i.
  1. 按援用传递(pass by reference):
    在按援用传递中,函数调用时传递的是理论参数的内存地址,而不是参数的值。因而,函数外部对形式参数的批改会影响到理论参数。这种传递形式在内存耗费方面更为高效,因为它防止了复制参数值。

按援用传递是 ABAP 中默认的参数传递形式。要应用按援用传递,能够省略关键字 VALUE

FORM my_function USING param TYPE i.

总结一下,按值传递和按援用传递的次要区别如下:

  • 按值传递在函数调用时会复制参数的值,而按援用传递只传递参数的内存地址。
  • 按值传递不会扭转理论参数的值,而按援用传递可能会扭转理论参数的值。
  • 按值传递可能会减少内存耗费,特地是在解决大数据结构时,而按援用传递在内存治理方面更为高效。

Subject: 2016-01-25 Task 优化进度 – document history 全副实现

主办法的行数压缩到 34 行,把逻辑拆分成很多小办法,减少了可读性,然而肯定水平上升高了性能:

  1. 因为 ABAP 虚拟机实现里办法调用的入栈出栈是有开销的
  2. 简直所有高级语言里,拜访局部变量的速度快于拜访类的成员变量
  3. 优化代码里办法的 signature 应用了很多 return type,returning 只能通过 pass by value 传递,比 pass by ref 慢。然而具体慢多少没测过。没有通过性能测试,贸然把所有 returning 参数改成 exporting 也不明智。

目前 AG3 用我的账号测试后果。右边是申请曾经优化过的前 4 个节点,左边 column 是 4 个优化节点 +attachment。单位为秒。

能够看出 attachment 的确比较慢,极其状况下消耗的工夫简直等于前四个节点的工夫总和。

今天开始 attachment 的优化钻研。

Subject: RE: one action item for 2016-01-25 – performance between pass by value and pass by reference

这是周一一个 action item 的 followup

我当初代码里大量应用了 pass by value 的 returning 写法,因为这样代码写进去比 pass by ref 稍稍精简点,能够少敲几个字符。然而 pass by value 会在函数体内 return 的时候,存在形参 copy 到实参的拷贝。因为拿不定留神最初到底用哪种,做了一个简略的测试。

别离用两种形式在 method 里填充一个领有 10 个字段的 structure,而后用两种形式返回:

比拟绿色的 pass by ref 和蓝色的 pass by value 性能。

1000 条:

性能相差 0.4 毫秒

100 万条:

性能相差 0.2 秒

因为 offline 的 use case 显然是 1000 条的 case,只有 0.4 毫秒的差别,能够放心使用了。

退出移动版