第一次在一个区域内显示一个 View 大约需要 5-10 秒慢,并且在我的 Prism Composite WPF 应用程序中 UI 在此期间卡住。在随后的时间里,View 的加载速度相对更快,没有任何 UI 卡住。 View 由 Devexpress WPF 网格控件组成,数据从 SQL 数据库中获取。我不认为它与网格控件/绑定(bind)有问题,即使我删除了与网格控件的绑定(bind),View 也几乎需要相同的时间将自身呈现到区域中。
这是我用来将 View 加载到 Shell 中定义的区域的代码:
public Action<MenuModel> LoadViewRequest { get; set; }
public SyncController(IUnityContainer container, IEventAggregator eventAggregator, IRegionManager regionManager)
{
this.container = container;
this.eventAggregator = eventAggregator;
this.regionManager = regionManager;
this.LoadViewRequest = (menuItem) => { LoadRequestedView(menuItem); };
this.eventAggregator.GetEvent<ViewRequestedEvent>().Subscribe(LoadViewRequest, ThreadOption.UIThread, true, i => i.Module == "Sync");
}
private void LoadRequestedView(MenuModel menuItem)
{
try
{
IViewModel viewModel = this.container.Resolve<SynchronizeViewModel>();
this.regionManager.Regions["ViewRegion"].Add(viewModel.View);
this.regionManager.Regions["ViewRegion"].Activate(viewModel.View);
viewModel.DisplayName = menuItem.Description;
this.eventAggregator.GetEvent<ViewNotificationEvent>().Publish(menuItem.Description);
}
catch (ResolutionFailedException) { }
}
这种行为背后的原因可能是什么?为什么View在第二次加载时几乎是瞬间加载?这是否意味着即使从 Region 中删除 View 后,我的应用程序仍保留对 View 的引用?
最佳答案
任何性能问题的答案始终是使用分析器。我们可以整天猜测问题是什么,但如果没有确凿的事实,那只能是猜测。
您应该学习使用性能分析器。我推荐的是 Redgate 的 ANTS Performance Profiler (http://www.red-gate.com/products/ants_performance_profiler/index.htm)。它易于使用,并且在网站和程序中对初学者有很多帮助。
这将毫无疑问地告诉您瓶颈在哪里。
关于c# - 为什么 View 在 Prism 复合 wpf 应用程序中第一次加载非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1684568/