Often, when we clear a vector or map, we expect it to be filled with data of a very similar size.
The overhead of a few extra links isn't that big and only lasts until the next update.
The size that was previously obtained, if it is less than cap, will make the extra selection disappear.
This can be extended to other places as well, but this can be done later.
Test:
| Master | Path |
|---|---|
| Timer 'update node vector': (Average: 1824 ns, Min: 200 ns) | Timer 'update node vector': (Average: 1631 ns, Min: 100 ns) |
| Timer 'update link vector': (Average: 1684 ns, Min: 100 ns) | Timer 'update link vector': (Average: 1139 ns, Min: 0 ns) |
| Timer 'update socket vector': (Average: 11210 ns, Min: 600 ns) | Timer 'update socket vector': (Average: 9000 ns, Min: 500 ns) |
| Timer 'update directly linked links and sockets': (Average: 8069 ns, Min: 500 ns) | Timer 'update directly linked links and sockets': (Average: 5649 ns, Min: 300 ns) |
| Timer 'update toposort': (Average: 21885 ns, Min: 400 ns) | Timer 'update toposort': (Average: 26374 ns, Min: 300 ns) |
| Timer 'update toposort': (Average: 11019 ns, Min: 400 ns) | Timer 'update toposort': (Average: 8716 ns, Min: 200 ns) |
| Timer 'update root frames': (Average: 1639 ns, Min: 100 ns) | Timer 'update root frames': (Average: 1955 ns, Min: 100 ns) |
| Timer 'update direct frames childrens': (Average: 2873 ns, Min: 200 ns) | Timer 'update direct frames childrens': (Average: 2666 ns, Min: 100 ns) |