Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: VB4/32,VB5,VB6
Expertise: Intermediate
Jul 1, 2000

Load items faster in the TreeView and ListView controls

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 " & i
Next
Instead of repeatedly query the TreeView1 object for its Nodes collection, you can store it in a temporary object variable:

Dim nods As MSComctlLib.Nodes
Set nods = TreeView1.Nodes
    
For i = 1 To 5000
    nods.Add , , , "Node " & i
Next
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
    Next
End 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:

  • the ListItems, ListSubItems, and ColumnHeaders collections of the ListView control
  • the Buttons and ButtonMenus collection of the Toolbar control
  • the ListImages collection of the ImageList control
  • the Panels collection of the StatusBar control
  • the Tabs collection of the TabStrip control
  • the ComboItems collection of the ImageCombo control
  • the Columns collection of the DataGrid control and more in general, whenever you have an ActiveX control that exposes a collection that you use inside a loop.
    Francesco Balena
     
    Comment and Contribute

     

     

     

     

     


    (Maximum characters: 1200). You have 1200 characters left.

     

     

    Sitemap
    Thanks for your registration, follow us on our social networks to keep up-to-date