There is an easy, but under-utilized, technique for loading many nodes in a TreeView control (or ListItems in a ListView control) that is faster than the standard technique. Consider this loop:
For i = 1 To 5000 TreeView1.Nodes.Add , , , "Node " & iNext
Instead of repeatedly query the TreeView1 object for its Nodes collection, you can store it in a temporary object variable:
Dim nods As MSComctlLib.NodesSet nods = TreeView1.Nodes For i = 1 To 5000 nods.Add , , , "Node " & iNext
You don’t even need the temporary variable, if you use a With block:
With TreeView1.Nodes For i = 1 To 5000 .Add , , , "Node " & i NextEnd With
On my system, these optimized loops run about 40% faster than the standard code showed above. This faster speed can be explained as follows: by storing the Nodes collection in a temporary variable (or using the hidden temporary variable that VB builds behind the With block), you avoid to bind the Nodes object to its parent TreeView1 object inside the loop. Because this latter binding is based on the inefficient dispid-binding, this step trims a lot of unnecessary overhead inside the loop.
The same reasoning applies to other ActiveX controls: