Hi,
we're developing a WinForms application with Telerik Controls (or rather update an older application of ours). In this app, we use different ListViews and we often encounter performance issues. We've found workarounds and performance improvements for the lower thousands (adding up to ~2000 items), which is fine, but there can be cases when the app need to load 10k items. It's not the normal case but it can happen every so often.
Now the improvements we made (e.g. using AddRange instead of Add) are still noticeable here, but it still takes about the ListView about 90 sec to load 9k items (with a small icon and text). That in and of itself is not the problem - sometimes it takes time to load so many items and since this an administration tool, we think our users could handle that.
The problem is that this is happening (or at least it seems so) when the ListView is rendering the items. That means it happens on the UI thread, which on the other hand means the app is not responding while the ListView is loading. Now that is something that needs to fixed, since I don't think that it is possible to lower the loading time to an unnoticeable level. I already tried to make the method asynchronous (public async void...) and use the await keyword but there are many complications if the user resumes to click around in the application. We'd have to make many architectural changes to make this work properly and that would cost too much time.
Is there any way to inform the user that the ListView is still loading without breaking the UI? Animated loading symbols would be fine but since the UI thread is blocked in this case, this wouldn't help much either. Any ideas?
Thanks and regards,
Steve.
PS: For reference, at the moment we load the ListView items like this, which seems to be the fastest way (we found):
01.
this
.listViewGroup.Items.AddRange(__result.Select(
02.
groupResult =>
03.
{
04.
var __lvdi =
new
ListViewDataItem();
05.
06.
//Do some work to transform the groupResult item into a ListViewDataItem
07.
//This takes almost no time at all (a fraction of a second)
08.
09.
return
__lvdi;
10.
}).ToArray());