In my Gantt-View, data binding is taking ages.
Initial binding takes more than 30 seconds for a few thousand records, updating is slightly faster at around 8 seconds.
Even more puzzling, after update data has been merged (DataSet merge), I try to restore the last active task. When I allocate the task to the GanttView's ActiveTask property, again it takes longer than 30 seconds.
// re-select formerly selected task if (_lastActiveTask != null) { foundTask = FindTask(_calendarInfo.Tasks, _lastActiveTask); if (foundTask != null) ultraGanttView.ActiveTask = foundTask; <--- this takes ages }
When I remove this allocation, the system will hang at the next allocation to the gantt chart:
// re-set scrollbar position if (_firstVisibleTask != null) { foundTask = FindTask(_calendarInfo.Tasks, _firstVisibleTask); if (foundTask != null) ultraGanttView.EnsureTaskInView(foundTask, true); <--- this takes ages, when code above is removed }
To sum up, always the first allocation plus binding and updating is taking far too long. I assume I missed out on some weird setting and appreciate any help :)
Before doing all that stuff, of course I do this:
ultraGanttView.BeginUpdate(); ultraGanttView.SuspendLayout();
I've made the private support case associated with this issue available for you to view. You should be able to see the status of the development issue on your support activity page.
Any current fix will be applied to versions 15.2 and 16.1. It will be necessary to upgrade in order to benefit from any fix we apply.
I understand that it is not a trivial matter for you to upgrade. I will work with the team to see if there is any possibility that you can work around this issue in 14.2.
Thanks Mike,
as an additional information, we are using v14.2 of the Infragistics DLLs (probably obvious from the sample). Unfortunately, upgrading is not an option.
I will not be around the office for the upcoming 4 weeks, but of course am eager to hear any results. Can I track the issue (Development ID) somehow, similar to tracking replies to this thread? Maybe with our company's account that is linked to the Infragistics licences?
Greetings,WeirdAl
I have reproduced this issue and I have asked our engineering staff to examine it further. To ensure that it will receive attention, I have logged this behavior in our internal tracking system with a Development ID of 219564. The next step will be for a developer to review my investigation and confirm my findings, or to offer a fix or other resolution.
Please let me know if you need more information.
Hello,
Thanks for sending your sample. I can see that the calls to e.Task.SetCustomProperty in the InitializeTaskGridRow handler are having a large impact on the performance. I will review this further and keep you updated with my findings.
Please let me know if you have any questions.
Still no sample, but here is what I found out lately:
It is not the data binding itself which is causing the problems, it's solely the fault of InitializeTaskGridRow. After I removed a call to Refresh() immediately after the data bindings are created, the InitializeTaskGridRow is now executed a bit later.
Nonetheless, there are a couple of questions about InitializeTaskGridRow that popped up:1. Why is InitializeTaskGridRow always called twice for each row? The call stack is the same in both calls, first call takes about twice as long as second call. When called second time for same row, custom values are already set before SetCustomProperty() is called, so that second call is totally useless.
2. The more custom properties, the longer the Init takes (obviously). Currently, I have 6 custom properties; Initialization of each row takes between 2ms and 16ms, at a total of roughly 3.350 rows (each called twice as stated above!). Is the lack of performance with (a number of) custom properties a known issue? I managed to find another forum post about that, but it lead to nowhere...
3. As already stated in my previous post, I am also having issues with my DataSet.Merge() on updating, because I am having pending changes in the merge destination table. It is adviced to call AcceptChanges() before Merge() to speed things up. Problem is, when I call AcceptChanges() on the DataSet (the one that is bound to the GanttView), all of the task's custom properties will not be created and InitializeTaskGridRow will throw a NullRef-Exception. How is AcceptChanges() affecting creation of the custom properties...?
Many thanks for all your efforts!
€: I put together a sample now which almost behaves like my project, exfept InitializeTaskGridRow is only called once instead of twice.
As you will notice, performance is ok for up to 1000 total rows, beyond that it gets worse rapidly! InitializeTaskGridRow takes exponentially longer for each row the more total rows there are...