As has been mentioned, UV optimizes for sequential processing of @AM
delimited lists, thus greatly reducing the need for REMOVE and SELECT TO
type work-arounds.  Not mentioned: SWAP is virtually instantaneous. Whatever
is causing the OP's process to slow down, it is not the FOR/NEXT <N>
construct, nor the SWAPs.

Here is a quick program that builds a 100,000 attribute array with two
values per attribute and then reads every attribute & value. The whole thing
(build then read) runs in less than two seconds.
Note that I first tested it by building LIST as

FOR N = 1 TO MAX
  LIST<N> = XXX
NEXT N

Which really did really slow down as it grew.

But using LIST := @AM:XXX produced the speedy result documented below.

/Scott Ballinger
Pareto Corporation
Edmonds WA USA
206 713 6006


>RUN BP SB

BUILDING...
START: 63682.6225
END:   63683.5232
ELAPSED: 0.9007  <-- less than 1 second to build 100,000 attributes

SIZE:   1277790
DCOUNT: 100001

READING...
START: 63683.5428
END:    63683.7975
ELAPSED: 0.2547  <-- about 1/4 sec to read and swap @vm to @am on 100,000
attributes.

>.L RELLEVEL

     RELLEVEL
001 X
002 10.1.4
003 PICK
004 PICK.FORMAT
005 10.1.4
>
>CT BP SB

     SB
0001 *array processing test
0002 MAX = 100000
0003 A0 = @(0)
0004 CL = @(-4)
0005
0006 T1 = TIME()
0007 PRINT "BUILDING..."
0008 PRINT "START: ":T1
0009 LIST = ""
0010 FOR N = 1 TO MAX
0011   REC = N
0012   REC<1,-1> = N*10
0013   LIST := @AM:REC
0014   IF MOD(N,1000) EQ 0 THEN PRINT A0:N:CL:
0015 NEXT N
0016 T2 = TIME()
0017 PRINT A0:"END:   ":T2:CL
0018 PRINT "ELAPSED: ":T2-T1
0019
0020 PRINT
0021 PRINT "SIZE:   ":LEN(LIST)
0022 PRINT "DCOUNT: ":DCOUNT(LIST,@AM)
0023 PRINT
0024
0025 PRINT "READING..."
0026 T1 = TIME()
0027 PRINT "START: ":T1
0028 FOR N = 1 TO MAX
0029   REC = LIST<N>
0030   CONVERT @VM TO @AM IN REC
0031   THING1 = REC<1>
0032   THING2 = REC<2>
0033   IF MOD(N,1000) EQ 0 THEN PRINT A0:N:CL:
0034 NEXT N
0035 T2 = TIME()
0036 PRINT A0:"END:    ":T2:CL
0037 PRINT "ELAPSED: ":T2-T1
0038
-------
u2-users mailing list
u2-users@listserver.u2ug.org
To unsubscribe please visit http://listserver.u2ug.org/

Reply via email to