在Prism(MEF v.5)wpf应用程序中,视图的加载速度非常慢

乌拉那

第一次加载视图需要2-5秒钟的时间依赖于视图内容。但是第二次立即加载。最“繁重”的内容只有一个RadGridView,但是在初始化过程中已经从数据库中加载了程序集和所有数据(空数据)。

private void Navigate(NavigateInfo info)
    {
        _workingNavigateInfo = info;
        _regionManager.RequestNavigate(MAIN_REGION_NAME, new Uri(info.NextViewName, UriKind.Relative), NavigationCompleted);
    }

我在应用初始化过程中初始化一个视图和viewmodel

var jobB = _container.GetExportedValue<ViewB>();
var jobBModel = _container.GetExportedValue<ViewBModel>();
jobB.DataContext = jobBModel;

这是我的ViewModels的一个例子

[Export]
[PartCreationPolicy(CreationPolicy.Shared)]
public class ViewBModel : NavigationViewModel
{
    private readonly IRegionManager _regionManager;
    private readonly NavigationService<ViewB> _navigation;

    [ImportingConstructor]
    public ViewBModel(IRegionManager regionManager)
    {           
        this._regionManager = regionManager;
        this.GotoA = new DelegateCommand<object>(this.ExecuteGotoA);
        this.GotoBack = new DelegateCommand<object>(this.ExecuteGotoBack);            
        _navigation = new NavigationService<ViewB>(regionManager);
    }

    public DelegateCommand<object> GotoA { get; private set; }
    public DelegateCommand<object> GotoBack { get; private set; }

    private void ExecuteGotoA(object notused)
    {
        _navigation.NavigateToPage("ViewA");
    }

    private void ExecuteGotoBack(object notused)
    {
        _navigation.NavigateBack();
    }
}

和查看

 [Export] 
public partial class ViewB : UserControl
{
    public ViewB()
    {
        InitializeComponent();
    }
}

由于没有[Export(“ ViewB”,typeof(ViewB))]属性的导航无法正常工作,因此我创建了一个新的MefServiceLocatorAdapter以避免找不到错误

public class MyMefServiceLocatorAdapter : MefServiceLocatorAdapter
{
    CompositionContainer _container;
    public MyMefServiceLocatorAdapter(CompositionContainer container): base(container)
    {
        _container = container;
    }

    protected override object DoGetInstance(Type serviceType, string key)
    {
        IEnumerable<Lazy<object, object>> exports = this._container.GetExports(serviceType, null, key).ToList();

        if ((exports != null) && (exports.Count() > 0))
        {
            // If there is more than one value, this will throw an InvalidOperationException, 
            // which will be wrapped by the base class as an ActivationException.
            return exports.Single().Value;
        }

        var extended = this._container.Catalog.Where(x => x.ExportDefinitions.Any(y => y.ContractName.EndsWith(key))).ToList();
        if ((extended != null) && (extended.Count() > 0))
        {
            var type = ReflectionModelServices.GetPartType(extended.Single()).Value;
            var serviceTypeIdentity = AttributedModelServices.GetTypeIdentity(type);
            return _container.GetExports(serviceType, null, serviceTypeIdentity).First().Value;
        }

        throw new ActivationException(FormatActivationExceptionMessage(new CompositionException("Export not found"), serviceType, key));
    }
}

我找到了一篇不错的文章,介绍如何加快导航速度,使用Prism和WPF导航速度更快,但是id并没有给我带来任何改善。我使用了性能分析器Redgate的ANTS,它向我展示了在第一次导航中,方法LoadContent和RequestCanNavigateFromOnCurrentlyActiveViewModel(不了解原因)运行1秒钟,但是第二次花费不到1毫升。我尝试在初始化期间执行LoadContent并将其添加到区域中,但是我将加载并将所有视图添加到区域中。不幸的是,这种策略并没有给我带来任何改善。

布莱恩·拉古纳斯

由于Telerik网格,它第一次运行缓慢的原因。渲染网格并加载所有装配体后,第二次加载会快得多。我几乎可以保证,如果您从视图中删除Telerik网格并运行您的应用程序,则该视图将加载得更快。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF + PRISM + MEF初始化DownloadedPartCatalogCollection

来自分类Dev

WPF GUI对象共享(PRISM / MEF)

来自分类Dev

MEF,Prism和导航上的新视图实例

来自分类Dev

PRISM 5 MEF AvalonDock 2.0 DataAdapter注册视图和父级被选中

来自分类Dev

在PRISM MEF中使用RegisterBootstrapperProvidedTypes时,ImportCardinalityMismatchException

来自分类Dev

在响应式UI上使用Prism v5

来自分类Dev

将.dll加载到单独的应用程序域(MEF)中

来自分类Dev

WPF Prism +现有的WPF应用程序

来自分类Dev

Wpf .Net.5应用程序中的Prism和Uno平台。使用什么Nuget软件包?

来自分类Dev

MEF中共享的应用程序资源

来自分类Dev

Prism Library UWP显示应用程序的多个视图

来自分类Dev

是否可以使用MEF RegistrationBuilder创建PRISM ModuleExport?

来自分类Dev

如何在Prism中使用MEF检索/导入对象

来自分类Dev

将WPF应用程序中的RESX文件与Prism一起使用

来自分类Dev

如何使用 Prism 6 在 WPF 应用程序中设置两个内容区域

来自分类Dev

无法在Visual Studio 2013 Silverlight 5导航应用程序中安装Prism

来自分类Dev

无法在Visual Studio 2013 Silverlight 5导航应用程序中安装Prism

来自分类Dev

WPF应用程序安全性和数据访问-MEF模块化应用程序MVVM

来自分类Dev

nginx和php5-fpm使用Laravel应用程序的响应速度非常慢

来自分类Dev

AngularJS小型测试应用程序渲染速度非常慢

来自分类Dev

WPF MEF +棱镜初始区域加载

来自分类Dev

使用MEF动态加载接口

来自分类Dev

HTML 5视频在IE 11中的加载速度非常慢

来自分类Dev

SignalR-从WPF应用程序调用集线器非常慢

来自分类Dev

由聚合物组件制成的网站/应用程序在IE11上的加载速度非常慢

来自分类Dev

MEF中的DLL版本控制

来自分类Dev

在MEF部分中引用ExportMetaData?

来自分类Dev

应用加载时连接速度非常慢

来自分类Dev

在chrome中打开开发者工具后,Google Maps v3的运行速度非常慢

Related 相关文章

  1. 1

    WPF + PRISM + MEF初始化DownloadedPartCatalogCollection

  2. 2

    WPF GUI对象共享(PRISM / MEF)

  3. 3

    MEF,Prism和导航上的新视图实例

  4. 4

    PRISM 5 MEF AvalonDock 2.0 DataAdapter注册视图和父级被选中

  5. 5

    在PRISM MEF中使用RegisterBootstrapperProvidedTypes时,ImportCardinalityMismatchException

  6. 6

    在响应式UI上使用Prism v5

  7. 7

    将.dll加载到单独的应用程序域(MEF)中

  8. 8

    WPF Prism +现有的WPF应用程序

  9. 9

    Wpf .Net.5应用程序中的Prism和Uno平台。使用什么Nuget软件包?

  10. 10

    MEF中共享的应用程序资源

  11. 11

    Prism Library UWP显示应用程序的多个视图

  12. 12

    是否可以使用MEF RegistrationBuilder创建PRISM ModuleExport?

  13. 13

    如何在Prism中使用MEF检索/导入对象

  14. 14

    将WPF应用程序中的RESX文件与Prism一起使用

  15. 15

    如何使用 Prism 6 在 WPF 应用程序中设置两个内容区域

  16. 16

    无法在Visual Studio 2013 Silverlight 5导航应用程序中安装Prism

  17. 17

    无法在Visual Studio 2013 Silverlight 5导航应用程序中安装Prism

  18. 18

    WPF应用程序安全性和数据访问-MEF模块化应用程序MVVM

  19. 19

    nginx和php5-fpm使用Laravel应用程序的响应速度非常慢

  20. 20

    AngularJS小型测试应用程序渲染速度非常慢

  21. 21

    WPF MEF +棱镜初始区域加载

  22. 22

    使用MEF动态加载接口

  23. 23

    HTML 5视频在IE 11中的加载速度非常慢

  24. 24

    SignalR-从WPF应用程序调用集线器非常慢

  25. 25

    由聚合物组件制成的网站/应用程序在IE11上的加载速度非常慢

  26. 26

    MEF中的DLL版本控制

  27. 27

    在MEF部分中引用ExportMetaData?

  28. 28

    应用加载时连接速度非常慢

  29. 29

    在chrome中打开开发者工具后,Google Maps v3的运行速度非常慢

热门标签

归档