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?
- The approximate average time needed to fetch all items from database = 1s
- 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– Dtex2014年01月08日 15:15:52 +00:00Commented Jan 8, 2014 at 15:15
-
Or employ some layered caching.Robert Harvey– Robert Harvey2014年01月08日 21:07:44 +00:00Commented Jan 8, 2014 at 21:07
-
@Dtex: Thanks, I can remove some unnecessary graphics.Bizhan– Bizhan2014年01月08日 21:37:18 +00:00Commented Jan 8, 2014 at 21:37
-
@Robert: can you explain how layer caching can be done?Bizhan– Bizhan2014年01月08日 21:37:37 +00:00Commented Jan 8, 2014 at 21:37
-
1msdn.microsoft.com/en-us/library/dd997362(v=vs.110).aspxRobert Harvey– Robert Harvey2014年01月08日 22:16:51 +00:00Commented Jan 8, 2014 at 22:16
1 Answer 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..
Explore related questions
See similar questions with these tags.