繁体   English   中英

WinForms中与WPF控件相关的性能问题

[英]Troubles of performance related to WPF control hosted in WinForms

我们有一个非常复杂的软件,主要使用C#中的.NET WinForms编写。 许多人为此做出了贡献。 这样的贡献之一就是添加了Win Forms中托管的Windows Presentation Foundation (WPF)控件。 所述控件被认为是通用控件,并在应用程序的许多地方使用。

直到几天前,一切都运行良好,当时我们开始看到启动该应用程序的过分延迟。 该应用程序过去在不到5分钟的时间内启动,但现在需要20分钟才能启动。

我们一直在分析情况,但发现很难确定真正的问题。 我们已经看到,在多个地方使用的行为不当的通用控件最终会调用以下框架函数:

在此处输入图片说明

上图显示了系统功能执行其职责所花费的时间。 每次初始化公共控件时,系统功能大约需要1.5分钟。 在我们的应用程序中,我们至少使用8次公共控件。 因此,总共12分钟。

有没有其他人看到过WinForms上托管的WPF控件的此类问题? 任何帮助,将不胜感激。

编辑:

我们使用的C#词典存在问题。 通过使用List <>摆脱它可以解决延迟问题。 Microsoft已在其末端复制了该问题。 他们正在努力。 也许,我们的应用程序将C#词典带到了边缘;)

谢谢大家的投入。

这很可能是WPF控件的初始化,而不是与ElementHost有关,也不是它托管在WinForms中。

没有看到WPF UserControl的代码,很难告诉您可能是什么,但是我要说WPF / WinForms的互操作无疑是一个红鲱鱼。

您可以尝试使用Ngen

The Native Image Generator (Ngen.exe)是可提高托管应用程序性能的工具。 Ngen.exe创建本机映像,即包含已编译的特定于处理器的机器代码的文件,并将其安装到本地计算机上的本机映像缓存中。 运行时可以使用来自缓存的本机映像,而不是使用just-in-time (JIT) compiler来编译原始程序集。

如果项目的程序集将在Ngen帮助下进行编译,则在启动应用程序并加载使用程序集的元数据之前,无需每次都运行JIT编译器。

Ngen将找到主程序集的所有静态依赖项,并将它们全部编译为低级映像。 这些图像将存储在程序集缓存(GAC)中,从而可以减少应用程序加载时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM