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链接的博客。真的是问题的答案。 似乎关键问题是客户正在使用的旧内核。

&&和连接在我们的系统上非常相似。(净重 7.50( 1.46秒与1.50秒。 显然,正在运行相同的优化,并且以可接受的方式工作。

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.

所以我要去检查客户的内核级别,并寻找事情缓慢的另一个原因。
顺便说一句:我不能使用

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

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

使用以下格式:

l_main_string = |{ l_main_string }{ l_extra }|.

我执行了两个测试 - 一个将十个字符的字符串连接到自身 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: 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: 175%

相关内容

  • 没有找到相关文章

最新更新