【发布时间】:2014-11-19 15:55:23
【问题描述】:
我有一个复杂的 WPF 应用程序,它使用了共享资源字典中的大量资源。 初始化的第一个窗口需要 8 秒来初始化。 SSD 磁盘驱动器的性能问题较少,但仍需要 2 秒。
我尝试使用 Visual Studio Profiler,但它显示 InitializeComponent(); 的时间成本很高; 需要显示的窗口。
我相信它与使用的 Resource 字典有关,但我无法替换它,因为我真的需要它,而且所有窗口和 WPF 元素都在使用 StaticResource 引用。
我尝试尽可能优化发布。 我创建了许多后台线程,但这并没有太大帮助。每当需要显示一个窗口时,它必须附加在同一 Dispatcher 下的 UI 线程上。这会造成很大的性能问题,并且屏幕上的所有 UI 和任何进度条都会被阻止。
所以总结一下。从调用 ShowDialog 到显示窗口为止 需要 8 秒。这仅在第一个窗口上可见。之后打开的任何其他窗口都会快速显示。
现在我首先要问的是后台发生了什么以及为什么这个延迟如此之大,其次可以做些什么来提高启动速度。
我没有提到,但在启动过程中没有出现异常或数据错误,所以它是 与异常无关。
我认为这与按钮和其他组件的初始化有关,因为几乎所有这些组件都重新设置了 ControlTemplate 的样式。
【问题讨论】:
标签: c# wpf multithreading performance