Scott Kane wrote:
I think I'll look at saving stacks containing
cards to an external file instead.

For very small data sets it's hard to beat the convenience of using cards. But for anything above a few thousand records it can be cumbersome.

As with HyperCard, the inventor of this engine (Scott Raney) reminds us that the stack structure is not optimized for use as a database. Dr. Raney suggests that you'll find serious performance degredation after about 5,000 records, and in my experience I find that to be true.

So if you need fewer than a couple thousand records then using cards may be a great option. But if you'll need more it may be useful to consider lists or custom properties.

To help you get an idea of the performance differences between these, I threw together a script that creates 5,000 records in each format, copied below. To run it:

1. Make a new stack
2. Make some fields (I used 7), group them,
   and turn on the group's backgroundBehavior
3. Paste the script below into a field

Here are the results (1GHz PowerBook, OS X 10.4, 768MB RAM):

Cards: 50860ms    List: 168ms    Props: 236ms

Saving the data shows a similar disparity of performance: stacks with large numbers of cards take an increasingly long time to save as the number of cards grows, disproportionate to the actual number of cards (not quite geometric, but certainly not linear). But saving a stack file with one card and thousands of properties is very fast.

--
 Richard Gaskin
 Managing Editor, revJournal
 _______________________________________________________
 Rev tips, tutorials and more: http://www.revJournal.com


--------------------------------------------------------

on mouseUp
  put 5000 into n
  --
  -- Cards:
  lock messages
  lock screen
  put the millisecs into t
  repeat n
    create cd
    repeat with i = 1 to the number of flds
      put "dsgsdtg sdtg dwg dsg sdgsdg" into fld i
    end repeat
  end repeat
  put the millisecs - t into t1
  --
  -- List:
  global gData
  put empty into gData
  put the millisecs into t
  repeat n
    put empty into tRecord
    repeat  the number of flds
      put "dsgsdtg sdtg dwg dsg sdgsdg" &tab after tRecord
    end repeat
    put tRecord &cr after gData
  end repeat
  delete last char of gData
  put the millisecs - t into t2
  --
  -- Props:
  set the customproperties of this stack to empty
  put the millisecs into t
  repeat with i = 1 to n
    put empty into tRecord
    repeat the number of flds
      put "dsgsdtg sdtg dwg dsg sdgsdg" &tab after tRecord
    end repeat
    set the uMyData[i] of this stack to tRecord
  end repeat
  put the millisecs - t into t3
  --
  put "Cards: "& t1 &"ms    List: "&t2&"ms    Props: "& t3 &"ms"
end mouseUp

_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to