Icon View Thread

The following is the text of the current message along with any replies.
Messages 1 to 10 of 14 total
Thread Problems with dynamically created panels
Thu, Nov 1 2018 9:26 AMPermanent Link

ooptimum

In my app I create panels dynamically to display a 2-level tree structure. It's about 30 nodes at the top level and about 600 nodes underneath. There are two problems with this:

a) The whole process of building a tree takes a long time. What can be done to speed it up?

b) The second problem is that these panels with nodes must be initially collapsed, but despite I call Minimize method and their internal state corresponds to the minimized view, they actually are not minimized when displayed. Moreover, this behavior is manifested only if the AutoSize.Height property of a panel is True. In real app their behavior even weirder, but in the attached demo it apparently depends on AutoSize.Height only. Is this some kind of RTL error or I have mistaken somewhere?



Attachments: panels.zip
Thu, Nov 1 2018 11:25 AMPermanent Link

Mark Brooks

Slikware

Avatar

ooptimum wrote:

<< In my app I create panels dynamically to display a 2-level tree structure. It's about 30 nodes at the top level and about 600 nodes underneath. There are two problems with this:

a) The whole process of building a tree takes a long time. What can be done to speed it up? >>

In terms of the speed question, are you using BeginUpdate / EndUpdate?
Thu, Nov 1 2018 12:06 PMPermanent Link

ooptimum

Yes, I use these methods, as well as some other little tricks. I would appreciate if you will try to improve code  attached to my first message in this thread.

Mark Brooks wrote:

In terms of the speed question, are you using BeginUpdate / EndUpdate?
Thu, Nov 1 2018 12:15 PMPermanent Link

Matthew Jones

ooptimum wrote:

> In my app I create panels dynamically to display a 2-level tree structure. It's about 30 nodes at the top level and about 600 nodes underneath. There are two problems with this:
>
> a) The whole process of building a tree takes a long time. What can be done to speed it up?

The simple answer is that you just don't create them, but you use a virtual arrangement instead. That is, create only what is needed to fill the display, and add code to tell them to update the displayed information according to an object they are told to display. You will find it all gets a lot more sensible, if a tad complicated.

I made a tree display that used this, and it worked just fine, including collapsing nodes etc. The code is posted here, but IIRC is slightly incomplete, and I don't recommend it really as it is complex. You are better off with a custom fit for your purpose.


--

Matthew Jones
Thu, Nov 1 2018 1:28 PMPermanent Link

ooptimum

"Matthew Jones" wrote:

> The simple answer is that you just don't create them, but you use a virtual arrangement instead. That is, create only what is needed to fill the display

I agree that redesign is an approach proven to work. However, in this case we have determined amount of data to display, which hardly will change, and all should be presented to user at once. In fact, this particular design is also proven to work very well in terms of UX in other app. The question is whether there is some room for improvement in speed or not.
Fri, Nov 2 2018 5:09 AMPermanent Link

Matthew Jones

ooptimum wrote:

> > The simple answer is that you just don't create them, but you use a virtual arrangement instead. That is, create only what is needed to fill the display
>
> I agree that redesign is an approach proven to work. However, in this case we have determined amount of data to display, which hardly will change, and all should be presented to user at once. In fact, this particular design is also proven to work very well in terms of UX in other app. The question is whether there is some room for improvement in speed or not.

You misunderstand. I don't say redesign, I say make it virtual. It is the only way to improve the speed, and it is proven good. The DOM management is not something that you can improve on. I faced this in a big project, and everywhere I ran up against making lots of items, the answer for performance is virtualising.

--

Matthew Jones
Fri, Nov 2 2018 6:31 AMPermanent Link

Matthew Jones

Matthew Jones wrote:

> I don't say redesign, I say make it virtual

Hmm, thinking further, maybe that is a redesign. Not visually, but implementation. It is still the answer though...

--

Matthew Jones
Fri, Nov 2 2018 7:13 AMPermanent Link

Mark Brooks

Slikware

Avatar

"Matthew Jones" wrote:

<<I say make it virtual. It is the only way to improve the speed, and it is proven good. The DOM management is not something that you can improve on. I faced this in a big project, and everywhere I ran up against making lots of items, the answer for performance is virtualising.>>

I concur with this statement. Certainly once you get into multiple hundreds of panels then I struggled to get acceptable performance without some form of virtualisation. It is a combination of DOM performance and, I think, EWB layout control. Whilst I LOVE the layout capabilities and would NEVER wish to do without them, I think there is a performance penalty to pay compared with, say, Angular.
Fri, Nov 2 2018 9:00 AMPermanent Link

ooptimum

"Matthew Jones" wrote:

<< Hmm, thinking further, maybe that is a redesign. Not visually, but implementation. >>

That's what I actually meant, not a visual appearance.

As to UI virtualization, I understand the general concept of it, but so far I can’t think how I could use it in this case.

Look, I need to create something like a two-level directory, where at the top level there will be categories of, say, questions, and at the second level the questions themselves. Categories and questions can be filtered, so that part of the panels and checkboxes will be simply hidden. However, without filters, all categories and questions should be visible. And I yet do not understand how virtualization can help here.
Fri, Nov 2 2018 9:24 AMPermanent Link

ooptimum

Mark Brooks wrote:

<< I concur with this statement. Certainly once you get into multiple hundreds of panels then I struggled to get acceptable performance without some form of virtualisation >>

I have already answered Matthew above, but since you insist on virtualization, tell me, please, how you can apply it here. Imagine that we have a very long checklist of about 600 questions, of which a user should select, say, only three. Questions are distributed among 30 categories approximately equally. They can be filtered, but without a filter we have to show them all. How this can be virtualized?
Page 1 of 2Next Page »
Jump to Page:  1 2
Image