首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >启动WPF应用程序时的性能问题

启动WPF应用程序时的性能问题
EN

Stack Overflow用户
提问于 2014-11-19 23:55:23
回答 2查看 1.2K关注 0票数 0

我有一个复杂的WPF应用程序,它使用了共享资源字典中的大量资源。初始化的第一个窗口需要8秒来初始化。SSD磁盘驱动器上的性能问题较少,但仍需要2秒。

我尝试使用Visual Studio Profiler,结果显示需要显示的窗口的InitializeComponent();花费了大量的时间。

我相信它与使用的资源字典有关,但我不能替换它,因为我真的需要它,而且所有的窗口和WPF元素都在使用StaticResource引用。

我试着尽可能地优化发布。我创建了许多后台线程,但这并没有太多帮助。每当需要显示一个窗口时,它都必须附加在同一个调度程序下的UI线程上。这会造成很大的性能问题,屏幕上所有的UI和进度条都会被阻塞。

所以总结一下。从调用ShowDialog到显示窗口需要8秒的时间。这仅在第一个窗口中可见。在此之后打开的任何其他窗口都会快速显示。

现在我在问,首先在后台发生了什么,为什么这个延迟这么大,其次可以做些什么来提高启动速度。

我没有提到,但在启动过程中没有异常或DataErrors,所以它与异常无关。

我相信这与按钮和其他组件的初始化有关,因为几乎所有这些组件都重新设置了ControlTemplate的样式。

EN

回答 2

Stack Overflow用户

发布于 2014-11-20 00:07:45

在显示第一个窗口之前,需要加载大量程序集,并且必须对大量代码进行JIT编译。减少启动时间的一种有用的技术是以这样一种方式构造代码,即在需要类型之前不加载它们。在深入研究核心WPF程序集之外的代码之前,最好在屏幕上显示一个带有等待指示器的空白窗口。针对该场景进行优化。

如果你想让某些东西尽快出现在屏幕上,请避免过早加载图像/媒体和其他资源。

避免同步加载任何数据,并尽可能少地在视图和视图模型构造函数中执行操作。将数据的加载推迟到视图显示之后(如果需要,抛出等待指示符)。

如果您认为您的Xaml资源是一个问题,那么将它们分开,让每个视图只引入它需要的资源。不要将它们合并到App.xaml中。您还可以研究如何跨多个视图执行share the resources more efficiently

Throwing up a splash screen可以缩短感知的启动时间。让任何东西出现在屏幕上,让用户知道你的应用程序实际上正在做一些事情,这是很有帮助的。

最后,不要太担心;启动时间短是WPF应用程序的标志,最后,您能做的也就这么多了。

票数 3
EN

Stack Overflow用户

发布于 2014-11-20 00:29:57

还可以使用ProfileOptimization类在程序的后续会话中缩短启动时间。可能对开发人员没有帮助,但可能会对用户产生更好的影响。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27021211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档