在首次加载

时间:2016-02-27 18:12:04

标签: c# .net wpf winforms xaml

关于第一次加载嵌入在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\W‌​indowsFormsIntegration.dll' 
Panel.Controls.Add(ElementHost): 4130ms

每次冷启动时,加载W indowsFormsIntegration.dll似乎需要约4秒。

这是我第一次尝试将WPF控件添加到Forms元素中,我不知道是什么导致的,更不用说如何解决将ElementHost添加到窗体控件的巨大首次加载时间。

对于记录,我第二次创建TestContainer的新实例的速度很快。

0 个答案:

没有答案