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毫秒的差别,能够放心使用了。