Consultor Eletrônico



Kbase P101079: Concatenating a LONGCHAR with a CHAR is slow
Autor   Progress Software Corporation - Progress
Acesso   Público
Publicação   10/08/2006
Status: Verified

FACT(s) (Environment):

OpenEdge 10.x

SYMPTOM(s):

Concatenating a LONGCHAR with a CHAR is slow

Concatenating a LONGCHAR with a CHAR is slower than concatenating a CHAR to a CHAR.

Performance issue when combining LONGCHAR with character variable

CAUSE:

This is expected behavior. When you write :
v_LONGCHAR = v_LONGCHAR + v_CHAR .

you implicitly ask Progress to cast v_CHAR to a LONGCHAR dataType. This operation is resource consuming.

FIX:

If you have loop in which you concatenate a CHAR to a LONGCHAR in each iteration you can implement a solution that use a bridge CHAR buffer variable. A sample:

Original code:

DEFINE VARIABLE v_LONGCHAR AS LONGCHAR NO-UNDO.
DEFINE VARIABLE v_CHAR AS CHARACTER NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
ETIME(YES).
DO i = 1 TO 100000:
v_char = CHR(i MODULO 250).
v_LONGCHAR = v_LONGCHAR + v_CHAR.
END.
MESSAGE ETIME
VIEW-AS ALERT-BOX INFO BUTTONS OK.

Modified code:

DEFINE VARIABLE v_LONGCHAR AS LONGCHAR NO-UNDO.
DEFINE VARIABLE v_CHAR AS CHARACTER NO-UNDO.
DEFINE VARIABLE i AS INTEGER NO-UNDO.
ETIME(YES).
DO i = 1 TO 100000:
v_char = CHR(i MODULO 250).
IF LENGTH(tempCharBuffer) + LENGTH(v_Char) > 31000 THEN DO:
v_LONGCHAR = v_LONGCHAR + tempCharBuffer.
v_LONGCHAR = v_LONGCHAR + v_CHAR.
tempCharBuffer = "".
END.
ELSE
tempCharBuffer = tempCharBuffer + v_CHAR.
END.
v_LONGCHAR = v_LONGCHAR + tempCharBuffer.
tempCharBuffer = "".
MESSAGE ETIME
VIEW-AS ALERT-BOX INFO BUTTONS OK.