I'm working on a business application (C#, WPF, EF, MVVM). I need to load a bunch of items from database, create view models for them and put them in a window. Is there a way to create the view model in another thread or do something similar to speed up UI?

  1. The approximate average time needed to fetch all items from database = 1s
  2. The approximate average time needed to instantiate all view models = 3s

I'm doing the first part through Loaded event of each item. but the second part is the bottleneck. any insight would be appreciated.

  • Creating view models in a background thread is generally a bad idea since they need to be bound on controls created on the main thread. I would try to reduce the initialization time first. – Dtex Jan 8 '14 at 15:15
  • Or employ some layered caching. – Robert Harvey Jan 8 '14 at 21:07
  • @Dtex: Thanks, I can remove some unnecessary graphics. – Bizhan Jan 8 '14 at 21:37
  • @Robert: can you explain how layer caching can be done? – Bizhan Jan 8 '14 at 21:37
  • 1

Break up the views into separate tabs/fly-outs etc and only populate these bits when the tabs/fly-outs are actually switched to.

Further to the above only populate the first element i.e. SELECT 1 only then populate the rest in the view on a scroll or drop down operation etc..

Lazy Loading.

In other words this is some of the layered caching alluded too and i do not see why the ViewModel has to have the data in advance as long as it goes off and gets it whenever requested..

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.