我有 WPF 窗口,它在 WPF 应用程序中托管时运行良好,但是当我从本机 C++ 应用程序中加载它时,渲染需要很长时间,并且 UI 线程会阻塞,直到它完成。
我窗口上的主要问题是一系列项目控件,用于显示 9 x 12 的图标网格,这些图标代表我系统中组件的状态。
整个项目控件的初始渲染最多需要 14 秒。(在 WPF 应用程序中运行时,这几乎是即时的)
每行都有一个文本标题,单击该标题时会显示每个状态图标的小数据摘要(最大值、最小值、平均值、标准差)。单击此标题最多可能需要 4 秒来呈现摘要,但在我的 WPF 应用程序中是即时的。
是否有任何已知的技巧可以使 WPF 在本机应用程序中很好地执行?
[编辑]
我刚刚尝试使用以下代码从大型 .NET Windows 窗体应用程序启动它:
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();
}
我遇到与从本机应用程序运行时相同的性能问题。(.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();
}
WindowInteropHelper 在做什么会导致性能问题?
[编辑]
当我使用 WindowInteropHelper 与所有者一起加载资源时,解决资源的方式是否存在问题?