20 de abril de 2020

TRANSFORM() un poquito mas lento que ALLTRIM(STR()), DTOC() y TTOC()

La función TRANSFORM() fue agregada a VFP hace ya algunas versiones, y es mucho mas conveniente que las equivalentes ALLTRIM(STR()), DTOC() y TTOC().

Sin embargo, es también un poquito más lenta como lo demuestra el siguiente código:

CLEAR
LOCAL lnNumber, ldDate, ltTime, lnStart, lnEnd, xx
lcString = "This is a test"
ldDate = DATE()
ltTime = DATETIME()
lnNumber = 123.456

lnStart = SECONDS()
FOR xx = 1 TO 10000
  TRANSFORM(m.lnNumber)
ENDFOR
lnEnd = SECONDS()
? "TRANSFORM(m.lnNumber)", lnEnd-lnStart

lnStart = SECONDS()
FOR xx = 1 TO 10000
  ALLTRIM(STR(m.lnNumber,7,3))
ENDFOR
lnEnd = SECONDS()
? "ALLTRIM(STR(m.lnNumber,7,3))", lnEnd-lnStart
?

lnStart = SECONDS()
FOR xx = 1 TO 10000
  TRANSFORM(m.ldDate)
ENDFOR
lnEnd = SECONDS()
? "TRANSFORM(m.ldDate)", lnEnd-lnStart

lnStart = SECONDS()
FOR xx = 1 TO 10000
  DTOC(m.ldDate)
ENDFOR
lnEnd = SECONDS()
? "DTOC(m.ldDate)", lnEnd-lnStart
?

lnStart = SECONDS()
FOR xx = 1 TO 10000
  TRANSFORM(m.ltTime)
ENDFOR
lnEnd = SECONDS()
? "TRANSFORM(m.ltTime)", lnEnd-lnStart

lnStart = SECONDS()
FOR xx = 1 TO 10000
  TTOC(m.ltTime)
ENDFOR
lnEnd = SECONDS()
? "TTOC(m.ltTime)", lnEnd-lnStart

Sin embargo, a menos que Ud. este codificando un ciclo apretado, la conveniencia de TRANSFORM() compensa lejos su pérdida de rendimiento. TRANSFORM() es solo un poquito mas lento que DTOC() y TTOC(). La diferencia de rendimiento es mayor al comparar TRANSFORM() con ALLTRIM(STR()) para convertir números a cadenas.

VFP Tips & Tricks - Drew Speedie

No hay comentarios. :

Publicar un comentario

Los comentarios son moderados, por lo que pueden demorar varias horas para su publicación.