Thursday, January 31, 2008

Workarea vs. Field-Symbols


Como todos sabemos (O por lo menos todos deberíamos saberlo)...En ABAP ya no es recomendado utilizar tablas internas con cabecera...Por lo cual mucha gente utiliza los llamados Workareas...Aunque en lo personal yo prefiero utilizar Field-Symbols...Así que veamos cual de las dos es mejor en cuanto a performance.


REPORT ydummy_atg_2.

TYPES: BEGIN OF ty_data,
value TYPE string,
END OF ty_data.

DATA: t_data TYPE STANDARD TABLE OF ty_data,
w_data TYPE ty_data.

FIELD-SYMBOLS: <fs_data> LIKE LINE OF t_data.

DATA: rt_str TYPE i,
rt_end TYPE i,
run_time1 TYPE p DECIMALS 2,
run_time2 TYPE p DECIMALS 2.

DO 500000 TIMES.
w_data-value = sy-index.
APPEND w_data TO t_data.
ENDDO.

GET RUN TIME FIELD rt_str.
LOOP AT t_data INTO w_data.
ENDLOOP.
GET RUN TIME FIELD rt_end.
run_time1 = ( rt_end - rt_str ) / 1000000 .

WRITE: 'Runtime WORKAREA', run_time1.

*------------------------------------------------

GET RUN TIME FIELD rt_str.
LOOP AT t_data ASSIGNING <fs_data>.
ENDLOOP.
GET RUN TIME FIELD rt_end.
run_time2 = ( rt_end - rt_str ) / 1000000 .

WRITE: 'Runtime FIELD-SYMBOL', run_time2.


Este pequeño programa, carga 50,000 registros y luego hace un LOOP.

Este es el resultado de su ejecución...


Runtime WORKAREA 0.25 Runtime FIELD-SYMBOL 0.06


Como podemos ver, los Field-Symbols ganan de lejos a los Workareas -;)

Saludos,

Blag.

7 comments:

Anonymous said...

Me dejas una vez más impresionado. No he utilizado nunca field-symbols y creo que tendré que empezar a hacerlo, veo que son muy rápidos.

Saludos,

bisonye.

Anonymous said...

Una consulta, copie el programa e hice muchas ejecuciones, y siempre los resultados variaban, a veces eran parecidos entre si, a veces los fieldsymbols eran mas veloces. ¿A que se puede deber esto? ¿A la carga en el server?

Saludos,

Alvaro "Blag" Tejada Galindo said...

Felipe:

Lo que dices es cierto...A veces depende de la carga del server, de los buffers...Pero de todos modos, creeme que los Field-Symbols siempre son más veloces...Yo he reducido tiempo de ejecución en programas de 1 hora a 10 minutos, unicamente utilizando Field-Symbols -;)

Saludos,

Blag.

Ali J .Pálacios said...

Por que razón es que son tan rapidos , nunca he estudiado la arquitectura de netweaver a ese nivel , pero me da curiosidad.

Unknown said...

hola, estoy aprendiendo todo esto y tambien me llamó la atención la diferencia entre la performance de estos dos metodos, acá encontré un link explicativo

http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb36bb358411d1829f0000e829fbfe/content.htm

Anonymous said...

Hola,

Es posible que usar field-symbols séa más eficiente que utilizar workareas como planteas en el artículo, pero también es cierto que SAP recomienda la utilización de field-symbols solo si no existe otra instrucción ABAP que te permita obtener el mismo resultado.

"The flexibility of field symbols provides elegant solutions to certain problems. On the other hand, it does mean that errors can easily occur. Since fields are not assigned to field symbols until runtime, the effectiveness of syntax and security checks is very limited for operations involving field symbols. This can lead to runtime errors or incorrect data assignments.

While runtime errors indicate an obvious problem, incorrect data assignments are dangerous because they can be very difficult to detect. For this reason, you should only use field symbols if you cannot achieve the same result using other ABAP statements".


http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3860358411d1829f0000e829fbfe/content.htm

Alvaro "Blag" Tejada Galindo said...

Totalmente de acuerdo -;) Uno debe utilizar Field-Symbols siempre y cuando sepa como utilizarlos...sino, pueden convertirse en un problema mas que en una solucion...

Saludos,

Blag.