提高 WPF 控件加载资源的性能

Posted

技术标签:

【中文标题】提高 WPF 控件加载资源的性能【英文标题】:Increase performance of WPF controls loading resources 【发布时间】:2012-05-10 21:19:38 【问题描述】:

我目前在应用程序中大量使用 DevExpress 控件。控件很棒,并且可以显着加快开发时间(因此,我不想放弃它们)但是,我对它们的性能有一些问题。

我的应用程序是一个 Shell/Modules/Views&ViewModels 应用程序(它遵循您在 Prism 中可以找到的许多设计模式)。

当第一次加载视图时,它需要很长时间才能显示(在我的一些用户 PC 上使用慢速机器,我们所说的只是挂在那里 5 秒以上)。所花费的时间显然取决于 DX 控件的使用情况(其中有多少应用程序以前从未见过)。

当您销毁视图并重新打开它时,它会在不到一秒的时间内打开。我的测试用例/性能配置文件中的 ViewModel 每次都重新创建 - 因此在视图调用之间我的代码中没有共享状态(没有单例注入对象)。

经过一番讨论和研究,我似乎已将问题缩小到按需加载 DX 控件的模板文件。 这里有一个线程: http://www.devexpress.com/Support/Center/Issues/ViewIssue.aspx?issueid=Q382256 其中参考: http://www.devexpress.com/Support/Center/p/B201967.aspx & DevExpress controls for WPF load time 这些线程中描述的解决方案是在启动时显示加载指示器或使用带有控件的隐藏窗口。这两个选项都不是我想做的(有趣的是,当我尝试一个简单的示例时,隐藏窗口选项似乎并没有获得太多性能 - 这也表明我可能遗漏了一些东西)。

我希望做的是在后台线程上预加载我知道我需要的模板文件。有什么办法可以在 WPF 中做到这一点? (我认为这更像是一个通用的 WPF 东西而不是 DevExpress 的东西——即使它需要在 DX 库本身中实现)。

对我或 DevExpress 的人有什么想法吗?

【问题讨论】:

通常您需要在 UI 线程上创建 WPF UI 控件,因此您可能会发现同样适用于 DX 模板... 嗨,大卫,你最后解决了你的问题吗? 【参考方案1】:

您可以在后台线程中执行的操作是预加载所有必需的程序集。还要确保它们是 nged-ed。 UI 控件需要从 UI 线程初始化。

【讨论】:

以上是关于提高 WPF 控件加载资源的性能的主要内容,如果未能解决你的问题,请参考以下文章

存储 WPF 图像资源

wpf 重新加载自定义控件出现异常

WPF:换出控制模板可以提高性能和效率?

WPF的Windows资源管理器控件?

WPF Dev GridControl控件加载慢的问题优化

WPF BitmapImage 占用资源无法释放无法删除问题