SAP Stringbuilder for ABAP?

phi*_*ady 4 string sap abap

我正在寻找一种更快的方法来添加到ABAP中的现有字符串.

ABAP版本NW 7.x.

目前字符串连接需要很长时间,特别是一旦字符串变大.我们需要构建大于10 mb的字符串.

该字符串在逻辑上构造有许多x = x + y操作.

concatenate l_main_string l_extra into l_main_string. " very slow
Run Code Online (Sandbox Code Playgroud)

有没有更快的方法在ABAP中构造大字符串?也许我们可以调用Kernel工具?

编辑:根据反馈和答案发布.
最有用的是由VWegert关联的博客.真的是这个问题的答案.似乎关键问题是客户使用的旧内核.

&&和Concatenate在我们的系统上非常相似.(NW 7.50)1.46s vs 1.50s repsectively.显然,同样的优化正在运行,并且它以可接受的方式工作.

  METHOD PERF_TEST_STRING.  " 1.50 sec
     DATA: n TYPE i value 5000000,
          lv_string TYPE string.
         do n times.
            CONCATENATE lv_string 'ABCDEFGHIJ0123456789' into lv_string.
        ENDDO.
        r_len = strlen( lv_string ).
    ENDMETHOD.
    METHOD PERF_TEST_STRING2. "1.46  
        DATA: n TYPE i value 5000000,
              lv_string TYPE string.
        do n times.
          lv_string = lv_string && 'ABCDEFGHIJ0123456789'.
        ENDDO.
        r_len = strlen( lv_string ).
     ENDMETHOD.
Run Code Online (Sandbox Code Playgroud)

所以我要检查客户的内核级别,并找出事情进展缓慢的另一个原因.
BTW:我CANT使用

x = x && Y.    " doesnt work prior to < 7.20
Run Code Online (Sandbox Code Playgroud)

因为许多客户没有> = 7.20 :(

gku*_*bed 5

使用以下格式:

l_main_string = |{ l_main_string }{ l_extra }|.
Run Code Online (Sandbox Code Playgroud)

我进行了两次测试 - 一次将十个字符串连接到自身50,000次以测试小的添加,另一次将字符串添加到自身26次以测试大量添加(这非常快速地变得非常大).


小字符串连接测试

DO 15 TIMES.
  lv_string = '1234567890'.
  DO 50000 TIMES.
    CONCATENATE '1234567890' lv_string INTO lv_string.
  ENDDO.
ENDDO.
Run Code Online (Sandbox Code Playgroud)

运行时间:775778ms(每次运行平均51718ms).

DO 15 TIMES.
  lv_string = '1234567890'.
  DO 50000 TIMES.
    lv_string = |1234567890{ lv_string }|.
  ENDDO.
ENDDO.
Run Code Online (Sandbox Code Playgroud)

运行时间:100543ms(每次运行平均6702ms).

业绩增长CONCATENATE:672%

大字符串连接测试

DO 15 TIMES.
  lv_string = '1234567890'.
  DO 26 TIMES.
    CONCATENATE lv_string lv_string INTO lv_string.
  ENDDO.
ENDDO.
Run Code Online (Sandbox Code Playgroud)

运行时间:143116ms(每次运行平均9541ms).

DO 15 TIMES.
  lv_string = '1234567890'.
  DO 26 TIMES.
    lv_string = |{ lv_string }{ lv_string }|.
  ENDDO.
ENDDO.
Run Code Online (Sandbox Code Playgroud)

运行时间:51995(每次运行平均3466ms).

业绩增长超过CONCATENATE:175%