Am 23.04.15 um 19:08 schrieb Victor Mayevski:
nx/xotcl objects require much less memory when these are namespace-less (contain no children or per-object methods).
I am trying to create a generic mechanism for ordered nested objects. Although it is true that objects with namespaces use more memory, I accept it as a trade off for flexibility I get. I really strive for a "natural" order of objects (after all that's what objects are supposed to do: be an analog for the real world). I am also trying to make it as unobtrusive as possible (without a tracking mechanism etc). The reason I wanted timestamps is that I could have naturally named objects, when needed.
i did some tests creating large trees (1 mio nodes).
The performance and memory consumption depends on the degree of the tree. If one creates e.g. a tree of degree 16, then namespaced objects are actually the best, since only a small fraction of the nodes (the non-leaf nodes) have namespaces. The ordered composite requires some double bookkeeping: no matter, how the objects are created, these are children of a (maybe global namespace) and additionally, one has to maintain a list of the children of the node. It is true that the inner nodes require more memory, but one saves the extra bookkeeping.
This advantage vanishes when the degree of the tree is low. For binary tree, half of the nodes have namespaces, ("#ns" below). Time becomes worse, since in deep trees there are many inner nodes, which are checked for existence.
If you have huge tree, i would certainly recommend to make experiments, since the differences can be huge.
-g
Ordered Composite
degree #ns RSS micro secs per obj 2 0 1130 34.0 10 0 1010 14.0 16 0 1010 14.6
Namespaced objects
degree #ns RSS micro secs per obj 2 500,000 1020 57.7 10 100,000 725 17.7 16 62,500 716 15.5