Deleting Data Woefully Slow
Kay C Lan
lan.kc.macmail at gmail.com
Wed Mar 24 23:59:18 EDT 2010
Mark and Brian,
Thanks for your comments.
Mark you are absolutely right about tests 9, 10 and 11 - it's the problem of
taking my real life situation and simplifying for the List. I've revised the
script and this time TESTED the output to confirm the last 3 create
identical data.
No change, it's still quicker to take a HUGE set of data and recreate a
slightly smaller version of it, than it is to just delete a small amount
from it - although it only applies if you can use 'repeat for each' to
create your new data.
Brian, whilst put line 1 to -2 might be OK if all you want to do is delete
the last line, and I accept I used it in my 'simple' examples, the last
three Tests are more real life, where the line to delete is imbedded
'somewhere' in the data. Interestingly though you again prove the point that
'putting data' in Rev is much faster than 'delete' data.
REVISED test results I got on a MBP 2.16GHz, 2 GB RAM, OS X.6.2, Rev Studio
4.0.0 Build 950
**repeat for each**
put after = 2 ms
delete line -1 = 327 ms
put before = 10 ms
delete line 1 = 9 ms
**repeat with x = **
put after = 158 ms
delete line -1 = 322 ms
put before = 196 ms
delete line 1 = 10 ms
Create 90% - repeat for each = 2 ms
Create 90% - repeat with x = 288 ms
Delete 10% = 199 ms
50000 repeats
**repeat for each**
put after = 19 ms
delete line -1 = 35491 ms
put before = 951 ms
delete line 1 = 934 ms
**repeat with x = **
put after = 18528 ms
delete line -1 = 35208 ms
put before = 18872 ms
delete line 1 = 929 ms
Create 90% - repeat for each = 26 ms
Create 90% - repeat with x = 33341 ms
Delete 10% = 19790 ms
The REVISION 3 script I used:
on mouseUp
repeat 50000 times
put random (9) & cr after tData
end repeat
--test 1
put the millisec into tStart
repeat for each line tLine in tData
put tLine & cr after tData1
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal1
--test 2
put the millisec into tStart
repeat for each line tLine in tData
delete line -1 of tData1
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal2
--test 3
put the millisec into tStart
repeat for each line tLine in tData
put tLine & cr before tData1
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal3
--test 4
put the millisec into tStart
repeat for each line tLine in tData
delete line 1 of tData1
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal4
--test 5
put the millisec into tStart
repeat with tCounter = 1 to the number of lines of tData
put line tCounter of tData & cr after tData1
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal5
--test 6 ***REVISED***
put the millisec into tStart
repeat with tCounter = 1 to the number of lines of tData
delete line -1 of tData1
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal6
--test 7
put the millisec into tStart
repeat with tCounter = 1 to the number of lines of tData
put line tCounter of tData & cr before tData1
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal7
--test 8
put the millisec into tStart
repeat with tCounter = 1 to the number of lines of tData
delete line 1 of tData1
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal8
--test 9 ***REVISED***
put the millisec into tStart
repeat for each line tLine in tData
if NOT(tLIne contains 1) then
put tLine & cr after tData1
end if
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal9
--test 10 ***REVISED***
put the millisec into tStart
repeat with tCounter = 1 to the number of lines of tData
if NOT(line tCounter of tData contains 1) then
put line tCounter of tData & cr after tData2
end if
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal10
--test 11 ***REVISED***
put tData into tData3
put the millisec into tStart
repeat with tCounter = the number of lines of tData down to 1
if (line tCounter of tData contains 1) then
delete line tCounter of tData3
end if
end repeat
put the millisec into tEnd
put tEnd - tStart into tTotal11
put "**repeat for each**" & cr into msg
put "put after = " & tTotal1 & " ms" & cr after msg
put "delete line -1 = " & tTotal2 & " ms" & cr after msg
put "put before = " & tTotal3 & " ms" & cr after msg
put "delete line 1 = " & tTotal4 & " ms" & cr after msg
put "**repeat with x = **" & cr after msg
put "put after = " & tTotal5 & " ms" & cr after msg
put "delete line -1 = " & tTotal6 & " ms" & cr after msg
put "put before = " & tTotal7 & " ms" & cr after msg
put "delete line 1 = " & tTotal8 & " ms" & cr after msg
put "Create 90% - repeat for each = " & tTotal9 & " ms" & cr after msg
put "Create 90% - repeat with x = " & tTotal10 & " ms" & cr after msg
put "Delete 10% = " & tTotal11 & " ms" & cr after msg
end mouseUp
More information about the use-livecode
mailing list