A natural frustration when first trying out GPO is that you are forced to
store all persistent property values against named keys rather than storing in "normal"
local fields.
To be precise, this is not absolutely true, but in general it is so.
This indirection is required in order to maintain the link structures needed to represent persistent object associations and ensure their integrity with dependency structures.
Similar structures are also used on other properties where they are used as a classification value.
These structures have been updated - September 2003 - to provide scalable support for the dataflow dependencies required for spreadsheet type computational model. The new mechanisms allow scalability with millions of objects with dependencies. - Specifically, complex interlinked objects will not result in single huge objects maintaining large arrays of object references.
A GPO LinkSet is defined implicitly by several GPOs referencing
a common GPO with the same key.
Internally, the key references an instance of GPOValue which holds both a reference
to the target GPO but also references to the previous and next
GPOs in the LinkSet.
This creates a linked list index structure that runs through the members of the LinkSet,
and it should be clear after some thought, that such a structure will have a constant time insertion
and removal no matter how large the set becomes.
The same structure is used to manage the dependencies when objects are removed or the property values are updated.