Skip to main content

Be careful of TreeView.Nodes.Clear

As you may have surmised from my last post, we were dealing with some performance issues in a treeview when it was repopulating nodes. This is an older tip but it's certainly something to consider if you are using TreeViews. I got the tip here and it's a good one.

When the Nodes.Clear method is called, it refreshes the treeview for each node it removes.

If your treeview is small, you won't really notice it but if you have a lot of entries on it, it's really noticeable.

Here's a quick test to try
1. Build a form with a treeview on it.
2. Add 200 nodes to it:
WITH THISFORM.TreeView
FOR lni = 1 TO 200
.Nodes.Add(,"_"+LTRIM(STR(lni)),"Item "+LTRIM(STR(lni)))
ENDFOR
ENDWITH

3. Just issue a _SCREEN.Activeform.treeview.nodes.clear() in the Command window and see how long it takes for control to come back. It can be a while. (my test showed 14 seconds - YIKES!!!)

Instead, remove each node individually:

FOR lni = 1 TO THISFORM.Treeview.nodes.Count to 1 STEP -1
THISFORM.TreeView.Nodes.Remove(lni)
ENDFOR

The result? The list goes away in under a second.

Sounds like if you have a tree view in your application, you should subclass it and create a clearNodes method to get rid of it.

The other approach?

THISFORM.treeview.visible = false
THISFORM.treeview.nodes.clear
THISFORM.treeview.visible = true

Another instant result.

Comments

Anonymous said…
Another way to speed it up

DECLARE INTEGER LockWindowUpdate IN WIN32API INTEGER hWnd
=LockWindowUpdate(Thisform.TreeView.hWnd)
Thisform.TreeView.OBJECT.Nodes.Clear
=LockWindowUpdate(0)

Popular posts from this blog

Blogs and RSS come to Microsoft.com

MS has just introduced their portal and it's pretty comprehensive. Nothing quite like learning that some people use AIM instead of MSN messenger, or that there really may be a need for supporting 4 monitors ( Cyrus Complains ) However, it's really a great sign that MS is serious about supporting the blogging community which seems to have um, exploded in size in the past year. Blogs and RSS come to Microsoft.com

FoxInCloud Stats

FoxInCloud sent this link a while back about their statistics regarding visits to their site: http://foxincloud.com/blog/2017/12/27/VFP-community-lessons-from-foxincloud-site.html What's interesting here is the breakdown of people. Yes, I think it's understandable that the Fox community is getting older. Another factor is the growth of the mobile and web environments taking over development. These environments really do push people towards the newer non-SQL or free SQL/hosted environments but more towards hosted storage options like Amazon and Google. A tool like FoxInCloud that helps MOVE existing applications to the cloud inherently competes with those environments. But FoxInCloud also allows developers to extend their application further by giving them a starting point using Javascript and the basic CSS (such as Bootstrap). If you're not rebuilding your application from scratch, it's certainly a great step forward. FoxPro VFP

Facebook Revolt - imeem alternatives?

When Scoble noted how Facebook under major revolt , I immediately thought of a site I found yesterday. The value offered by Facebook's feeds however do seem very cool - if only they had been smart and made them opt-in, instead of opt-out. I have been impressed though with Facebook's opening of their API's - they certainly get it that they need to open it up to developers. I haven't really explored this other site, beyond my first look. In some ways, I think the whole social networking site thing is just silly , but this site (imeem) definitely showed some value. I could find music (as posted by the artist), it worked in Firefox and it allowed people to rank, add to delicious and more. And when I'm looking at someone, I can see what they're up to (or rather what they allow us to see). Anyways, you may want to check it out.