在本机C++应用程序中托管WPF表单时的性能问题

ghn*_*hnz 10 c++ wpf performance native

我有WPF窗口,它在WPF应用程序中托管时运行正常,但是当我从我的本机C++应用程序中加载它时,渲染和UI线程块需要很长时间才能完成.

我窗口上的主要攻击者是一系列项目控件,用于显示9到12个图标网格,这些图标代表我系统中组件的状态.

初始渲染的整个项目控制最多需要14秒.(在WPF应用程序中运行时几乎是即时的)

每行都有一个文本标题,单击该标题时会显示每个状态图标的小数据摘要(max,min,mean,std dev).单击此标题最多可能需要4秒才能呈现摘要,但在我的WPF应用程序中是即时的.

是否有任何已知的技巧使WPF在本机应用程序中表现良好?

[编辑]

我刚刚尝试使用以下代码从大型.NET窗体应用程序启动它:

    public bool? ShowWpfDialog(System.Windows.Window window, Form owner)
    {
        var helper = new System.Windows.Interop.WindowInteropHelper(window)
                         {Owner = (owner == null) ? IntPtr.Zero : owner.Handle};
        return window.ShowDialog();
    }
Run Code Online (Sandbox Code Playgroud)

我遇到与从本机应用程序运行时相同的性能问题.(.net应用程序也运行本机代码.)

[编辑]

当我不使用WindowInteropHelper时,代码执行正常:

    public bool? ShowWpfDialog(System.Windows.Window window, Form owner)
    {
        //var helper = new System.Windows.Interop.WindowInteropHelper(window)
        //                 {Owner = (owner == null) ? IntPtr.Zero : owner.Handle};
        return window.ShowDialog();
    }
Run Code Online (Sandbox Code Playgroud)

什么是WindowInteropHelper会导致性能问题?

[编辑]

当我使用WindowInteropHelper向所有者加载资源时,是否存在资源解决方式的问题?

spe*_*izt 0

您可以尝试通过NGEN创建和使用 .NET 程序集的本机映像,这将显着加快速度,尽管我不知道您的情况会有多大差异......至少它应该减少加载时间