繁体   English   中英

用于 ABAP 的 SAP Stringbuilder?

[英]SAP Stringbuilder for ABAP?

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

ABAP 版本 NW 7.x

目前字符串连接需要很长时间,尤其是当字符串变大时。 我们需要构建大于 10 mb 的字符串。

该字符串是通过许多x = x + y操作逻辑构造的。

concatenate l_main_string l_extra into l_main_string. " very slow

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

编辑:基于反馈和发布的答案。
最有用的是 VWegert 链接的博客。 真的是问题的答案。 似乎关键问题还在于客户正在使用的旧内核。

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

  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.

所以我要去检查客户的内核级别并寻找事情变慢的另一个原因。
BTW:我不能使用

x = x && Y.    " doesnt work prior to < 7.20

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

使用以下格式:

l_main_string = |{ l_main_string }{ l_extra }|.

我进行了两次测试 - 一次将 10 个字符串与自身连接 50,000 次以测试小添加,另一次将字符串添加到自身 26 次以测试大添加(这会很快变得非常大)。


小字符串连接测试

DO 15 TIMES.
  lv_string = '1234567890'.
  DO 50000 TIMES.
    CONCATENATE '1234567890' lv_string INTO lv_string.
  ENDDO.
ENDDO.

运行时间:775778 毫秒(每次运行平均 51718 毫秒)。

DO 15 TIMES.
  lv_string = '1234567890'.
  DO 50000 TIMES.
    lv_string = |1234567890{ lv_string }|.
  ENDDO.
ENDDO.

运行时间:100543 毫秒(每次运行平均 6702 毫秒)。

CONCATENATE性能CONCATENATE :672%

大字符串连接测试

DO 15 TIMES.
  lv_string = '1234567890'.
  DO 26 TIMES.
    CONCATENATE lv_string lv_string INTO lv_string.
  ENDDO.
ENDDO.

运行时间:143116 毫秒(每次运行平均 9541 毫秒)。

DO 15 TIMES.
  lv_string = '1234567890'.
  DO 26 TIMES.
    lv_string = |{ lv_string }{ lv_string }|.
  ENDDO.
ENDDO.

运行时间:51995(每次运行平均 3466 毫秒)。

CONCATENATE性能CONCATENATE :175%

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM