【06】SAP ABAP性能优化 - 内存管理 (ABAP Memory vs. SAP Memory)

1. 基础知识:

ABAP程序在首次执行前(或新版本激活后,再次执行时),会经历编译的过程,生成一个可执行对象LOAD, 这个可执行对象是存储在应用服务器AS的buffer里的。

其实对于运行环境而言,ABAP程序由两部分组成:一部分是固定不可修改的,例如编译后的可执行代码、程序中的文本、常量等等,这些内容会存储在PXA(Program Execution Area)中。另一部分,对程序而言,是可能发生变化的内容,例如程序运行中的变量等,这一部分的内容会存储在Roll Area中。

当同一个程序被并发执行多次时(被1个User同时执行多次,或者多个User同时并发单独执行),都会为每次一运行分配独立的Roll Area. 这也就是不同user同时执行一个相同的程序时,并不会相互干扰的原因。

2. External Session vs. Internal Session

学习ABAP Memory和SAP Memory,首先要区分External Session和Internal Session的概念。

  • External Session: 一个External Session就是一个独立的GUI Window. 在SAP GUI中默认定义最大可有6个External Session,也即最多可以有6个独立的GUI Window。当然,这个是可以由Basis配置的,因为在SAP NW 7.0以上的版本,最多可以支持16个External Session。
  • Internal Session:在一个External Session中,又可以有多个Internal Session。在ABAP程序中,可以通过SUBMIT, CALL TRANSACTION等方式产生新的internal session,系统对于每一个Internal Session会分配单独的Roll Area。ABAP中,在一个program中,最多可以有9个Internal Session.

产生Internal Session的语法,区别如下:

执行完会返回执行完不会返回
SUBMIT program_name AND RETURNSUBMIT program_name **
CALL TRANSACTION tran_nameLEAVE TO TRANSACTION tran_name

3. ABAP Memory vs. SAP Memory

ABAP Memory是Internal Session间可共有的内存空间;而SAP Memory是External Session间可共有的内存空间,它们的关系见下图:
在这里插入图片描述
可以使用ABAP在Internal Session见进行数据传递,当前Session结束后,ABAP Memory会自动释放。

可以使用FREE MEMORY ID xxx的方式进行手动释放。

下面给出了一个利用ABAP memory进行数据传递的例子。

REPORT ztest_calculate_main.
**********************************************************************
* ABAP Memory
**********************************************************************
DATA: lv_a TYPE i,
      lv_b TYPE i.

lv_a = 1.
lv_b = 2.

EXPORT val_1 = lv_a
       val_2 = lv_b
       TO MEMORY ID 'test_val_id'.

SUBMIT ztest_calculate AND RETURN.

WRITE: / 'run successfully.'.
REPORT ztest_calculate.

DATA: lv_val_1 TYPE i,
      lv_val_2 TYPE i,
      lv_sum   TYPE i.

IMPORT val_1 = lv_val_1
       val_2 = lv_val_2
       FROM MEMORY ID 'test_val_id'.

lv_sum = lv_val_1 + lv_val_2.

WRITE:/ 'result = ', lv_sum.

可以使用SAP Memory在External Session间进行数据传递,例如在SU3中维护的user parameter其实就是使用的SAP Memory。

SAP Memory在user退出系统登录后自动释放( SAP Memory的这些parameter ID是存储在TPARA表中的,程序中指定的PARAMETER ID必须是TPARA表中存在的)。

** In external session 1 - Set 
DATA: ls_bkpf TYPE bkpf.
  SET PARAMETER ID 'BUK' FIELD ls_bkpf-bukrs.


** In external session 2 - Get 
DATA: ls_header TYPE bkpf.
  Get PARAMETER ID 'BUK' FIELD ls_header-bukrs.

当然,也可以使用SAP Memory在Internal Session间进行值的传递,如下例:

**********************************************************************
* SAP Memory
**********************************************************************
DATA: ls_bkpf TYPE bkpf.

SELECT * FROM bkpf INTO ls_bkpf
  UP TO 1 ROWS
  WHERE gjahr = 2018.
ENDSELECT.
IF sy-subrc = 0.
  SET PARAMETER: ID 'BUK' FIELD ls_bkpf-bukrs,
                 ID 'BLN' FIELD ls_bkpf-belnr,
                 ID 'GJR' FIELD ls_bkpf-gjahr.
  CALL TRANSACTION 'FB03' AND SKIP FIRST SCREEN.
ENDIF.

WRITE: / 'back from FB03'.

通常PARAMETER ID会与Data Element绑定,如下图所示。这样通过PARAMETER ID来为屏幕预填一些default的值。
在这里插入图片描述

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
《从实例学SAP ABAP编程1-10章》是一本SAP ABAP编程的经典入门教材。本书从简单的SAP ABAP编程入手,通过多个实例向读者展示了SAP ABAP编程的核心概念和语法。 在第一章中,本书通过一个简单的例子介绍了SAP ABAP编程的基础知识,讲解了ABAP编辑器、ABAP数据字典和ABAP Workbench等重要工具的用法。 在第二章中,本书通过一个简单的例子向读者介绍了ABAP表格的创建和维护,并讲解了一些与表格相关的SAP ABAP编程的语法和概念。 在第三章中,本书介绍了SAP ABAP编程中的面向对象编程,通过几个例子向读者展示了如何使用类、对象和继承等概念进行SAP ABAP编程。 在第四章中,本书介绍了SAP ABAP编程中的函数模块,向读者讲解了如何创建和调用函数模块,以及如何在SAP系统中使用函数模块。 在第五章中,本书介绍了SAP ABAP编程中的异常处理,向读者讲解了如何使用TRY/CATCH语句处理SAP系统中的异常情况。 在第六章中,本书介绍了SAP ABAP编程中的Web服务,向读者讲解了如何创建和使用SAP系统中的Web服务,以及如何使用HTTP和SOAP协议进行数据通信。 在第七章中,本书介绍了SAP ABAP编程中的ALV报表,向读者讲解了如何创建和维护SAP系统中的ALV报表,以及如何对报表进行数据操作和定制。 在第八章中,本书介绍了SAP ABAP编程中的BADI和Enhancement点,向读者讲解了如何使用BADI和Enhancement点扩展和修改SAP系统中的业务逻辑。 在第九章中,本书介绍了SAP ABAP编程中的Smart Form,向读者讲解了如何使用Smart Form创建和维护SAP系统中的表单。 在第十章中,本书介绍了SAP ABAP编程中的SAP HANA数据库,向读者讲解了如何使用SAP HANA数据库进行高效的数据处理和分析。 通过阅读本书,读者可以快速掌握SAP ABAP编程的核心知识和技能,从而能够独立进行SAP系统的开发和维护工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SAP-nkGavin

给作者赏杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值