0

我正在使用复合应用程序块(“prism”)V2 构建一个 wpf 应用程序,并且我遇到了一个问题,即由模块注入的用户控件的渲染速度非常慢。用户控件包含一个包含大约 2000 行的数据网格,并且控件呈现到屏幕上存在相当大的延迟。最初我认为缓慢是由于 wpf 工具包数据网格控件本身造成的,但事实并非如此。当我将包含数据网格 (TestControl) 的控件移出外部模块并进入 shell 项目并直接从那里加载时,控件立即呈现而没有任何问题。

我在模块中的 IModule 实现中使用以下代码将 wpf 用户控件注入 shell

 this.regionManager.RegisterViewWithRegion("mainRegion", typeof(TestControl));

从 prism 应用程序中的其他模块加载控件时是否存在性能问题?加载它们的最佳方式是什么?

谢谢

4

2 回答 2

1

这很可能是生命周期事件的产物。在您的模块开始加载和注册自己之前,您的 shell 将很好地显示出来。如果你这样做,它会“看起来”需要更长的时间,因为你的 UI 会出现一个大洞,直到模块初始化代码触发。

很多示例都让您执行“Shell.Show();”之类的操作。在您的引导程序的 CreateShell 方法中,但您可以考虑将对 Shell 的引用移动到引导程序类的私有成员并在其上调用 .Show() ,如下所示:

public class Bootstrapper : UnityBootstrapper
{
    Shell shell;
    protected override DependencyObject CreateShell()
    {
        shell = Container.Resolve<Shell>();
        return shell;
    }

    protected override void InitializeModules()
    {
        base.InitializeModules();
        shell.Show();

    }

我刚刚尝试了这个,它确实感觉我的应用程序得到了性能提升,所以我想我会自己做出这个改变。

如果您的模块需要很长时间才能加载,您可能还希望在 CreateShell 之间和 InitializeModules 之后显示启动屏幕。

于 2009-07-29T18:04:16.697 回答
1

这里的问题似乎是 wpf 在从后台线程更新 UI 时更新缓慢。我在 codeplex 上进行了对话,并或多或少地对其进行了排序。

http://compositewpf.codeplex.com/Thread/View.aspx?ThreadId=64113

于 2009-08-25T20:44:01.403 回答