关于第一次加载嵌入在Forms UserControl中的WPF控件,我遇到了一个主要的性能问题,只需要在运行时添加一个ElementHost对象需要3到4秒。
我正在使用Visual Studio 2008作为.net 3.5应用程序。
我有以下设置:
具有单个Panel的Forms容器:
using System.Windows.Forms;
using System.Windows.Forms.Integration;
namespace MyNamespace
{
public partial class TestContainer : UserControl
{
private ElementHost ctrlHost;
private TestWPFControl wpfAddressCtrl;
public TestContainer()
{
InitializeComponent();
ctrlHost = new ElementHost();
ctrlHost.Dock = DockStyle.Fill;
panel1.Controls.Add(ctrlHost); //slow!
wpfAddressCtrl = new TestWPFControl();
wpfAddressCtrl.InitializeComponent();
ctrlHost.Child = wpfAddressCtrl;
}
}
}
标准VS2008生成WPF控件:
namespace MyNamespace
{
public partial class TestWPFControl : UserControl
{
public TestWPFControl()
{
InitializeComponent();
}
}
}
伴随XAML:
<UserControl x:Class="MyNamespace.TestWPFControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="382" Width="467">
<Grid>
<Button Height="23" Margin="170,46,222,0" Name="button1" VerticalAlignment="Top">Button</Button>
</Grid>
WPF控件(用于测试目的)只有1个单按钮,没有逻辑或任何东西。
一旦我创建了TestContainer的实例,它就需要大约3到4秒才能显示WPF。
在调试上面的那行时,行
panel1.Controls.Add(ctrlHost);
是减速因素。
使用计时器进行性能分析:
new ElementHost(): 23ms
ElementHost.DockStyle: 0ms
'C:\Windows\assembly\GAC_MSIL\WindowsFormsIntegration\3.0.0.0__31bf3856ad364e35\WindowsFormsIntegration.dll'
Panel.Controls.Add(ElementHost): 4130ms
每次冷启动时,加载W indowsFormsIntegration.dll似乎需要约4秒。
这是我第一次尝试将WPF控件添加到Forms元素中,我不知道是什么导致的,更不用说如何解决将ElementHost添加到窗体控件的巨大首次加载时间。
对于记录,我第二次创建TestContainer的新实例的速度很快。