tips:revmedia:v1i10a6

Vroom

Published ByDateVersionKnowledge LevelKeywords
Sprezzatura Ltd01 APR 19901.16+EXPERTVROOM, INDEX, SELECT, BASIC, PERFORM, SPEED, FIELD

As promised, the first in an occasional series with hints on getting the most from Advanced Revelation. Whilst it is generally more cost effective to put in faster hardware than spend weeks optimising software, an awareness of possible improvements is still useful. Some of the hints included here may seem obvious, but all are taken from hints delivered to experienced REV/AREV programmers recently.

It is frequently necessary when eliciting user response to ensure that the information returned is valid. This can be done in the following manner (the code is by way of example only, obviously it can be improved in other ways, popups, collectors, @LOWER.CASE etc).

    VALID = 0
    ANS = ""
    LOOP
       CALL MSG("Y/N","RC",ANS,"")
       IF ANS="Y" OR ANS="y" OR ANS="N" OR ANS="n" THEN
          VALID = 1
       END
    UNTIL VALID
    REPEAT

however, it can be accomplished more efficiently with the construct

    VALID = 0
    ANS = ""
    LOOP
       CALL MSG("Y/N","R",ANS,"")
       IF INDEX("YyNn",ANS,1) THEN VALID = 1
    UNTIL VALID
    REPEAT

This construct also has the advantage that its performance hardly degrades as the amount of comparisons increase unlike the former method. In the table below, the same comparisons were performed multiple times to evaluate the times taken for each. From this it can be seen that INDEX is quicker even if testing for a single value. (This benchmark was performed on 2.0)

    Comparisons ³  1    ³  2    ³  3    ³  4    ³  10
    ÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ
    INDEX       ³  2.03 ³  2.08 ³  2.09 ³  2.11 ³   2.36
    IF n OR n   ³  2.25 ³  3.35 ³  4.45 ³  5.60 ³  12.14

When dealing with a two part key (or similar) it is quicker to use the FIELD function (EG PART1 = FIELD(KEY,"*",1)) than to use the [ ] syntax (EG PART1 = KEY[1,"*"]).

When selecting records from file for subsequent processing AND THE FIELDS FORMING THE SELECTION CRITERIA ARE NOT INDEXED it is quicker to extract the required records by reading in all records and doing the required comparison in BASIC than by PERFORMing a select. I have seen the latter done at several sites visited lately and speed improvements of upto 100% have been gained by adopting the former method (depending on the complexity of he comparison criteria).

(Volume 1, Issue 10, Pages 8,9)

  • tips/revmedia/v1i10a6.txt
  • Last modified: 2024/06/19 20:20
  • by 127.0.0.1