复合应用程序块区域注入缓慢

时间:2009-07-29 16:30:03

标签: wpf prism

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

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

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

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

由于

2 个答案:

答案 0 :(得分: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之后显示启动画面。

答案 1 :(得分:1)

这里的问题似乎是,当后台线程中的调度员更新UI时,更新速度很慢。我接受了关于codeplex的谈话,并且或多或少地对它进行了分类。

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