【问题标题】:Composite Application Block Region injection slow复合应用程序块区域注入慢
【发布时间】:2015-07-21 16:43:12
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

    标签: wpf prism


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      这很可能是生命周期事件的产物。在您的模块开始加载和注册自己之前,您的 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 之后显示一个启动画面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多