I wanted to share some of the performance and API improvements we've made to the DevExpress WinForms TreeList Control in our v17.1 development cycle. If you're not familiar with this product, you can think of it as a treeview and listview hybrid...The component is designed to display self-referenced hierarchies and render it as a traditional tree or a grid.
Before I begin, let me offer the following...If you're evaluating this product and would like to test it against competing products, we'd be more than happy to provide the sample project used to generate these test results. I think you'll be pleasantly surprised as to how fast our WinForms TreeList executes the functions listed below.
Though we are not finished with all the optimizations we hope to introduce this year, I want to assure you that our goal is to improve the TreeList to such a degree that it's on par with our WinForms Grid from a performance perspective.
Performance
The following table describes the performance improvements shipping inside v17.1.
Time (ms)
|
DevExpress TreeList v16.2
|
DevExpress TreeList v17.1
|
DevExpress WinForms Grid
|
Sorting by one or more columns
|
Flat list
|
116
|
47
|
14
|
Self-referenced hierarchy
|
58
|
30
|
n/a
|
Filtering by simple or complex criteria
|
Flat list
|
46
|
31
|
12
|
Self-referenced hierarchy
|
52
|
36
|
n/a
|
Searching (against a single column/against all columns)
|
Flat list
|
116/444
|
98/321
|
92/173
|
Self-referenced hierarchy
|
119/457
|
100/332
|
n/a
|
Loading from data source (10k/100k records)
|
Flat list
|
36/650
|
34/466
|
5/10
|
Bound hierarchy
|
81/2005
|
79/1703
|
n/a
|
Unbound hierarchy
|
854/minutes
|
103/4182
|
n/a
|
API
In this release, we've updated the Tree List's API so that it is more consistent and in-line with our WinForms Grid. These changes address common data operations such as obtaining and setting cell values, selection, sorting and filtering, formatting and hit testing. Our new API also includes a number of tree-specific features including a LINQ-friendly node iterator:
treeList.NodesIterator.Do(node =>
{
if((State)node["State"] == State.Inactive))
node.Expanded = false;
});
int count = treeList1.NodesIterator.Visible
.Where(node => (decimal)node["Discount"] > 0).Count();
By extending the Tree List's API, we've been able to improve the product's core functionality and expect to evolve it further in coming release cycles. For instance, the filter related API changes introduced in v17.1 allowed us to incorporate Excel-inspired Filtering and the Auto-Filter Row....and helped improve core capabilities such as the availability of predefined filters when using Excel-inspired filter dropdowns.

As always, we welcome your comments and feedback. Tell us how you're currently using our WinForms TreeList Control.
Free DevExpress Products – Get Your Copy Today
The following free DevExpress product offers remain available. Should you have any questions about the free offers below, please submit a ticket via the
DevExpress Support Center at your convenience. We’ll be happy to follow-up.