【问题标题】:Does ViewModel decrease web apps performaceViewModel 会降低 Web 应用程序的性能吗
【发布时间】:2012-05-28 22:01:15
【问题描述】:

据我所知,使用视图模型可以使 web 开发。生活更轻松,从某种意义上说,我们可以使用这种方法在本地化字符串中仅显示需要的属性。我还在 mvc3 视图模型中使用 jquery 验证等。

现在我很怀疑,因为我的 webapp 遇到了真正的瓶颈。像这样查询所有对象(其中 20 个)

 List<Domain.Property> data = session.Query<Domain.Property>().ToList();    
 return PropertyViewModel.FromDomainModel(data);

并且该属性对象列表被发送到我的 ViewModel,其中 FromDomainModel 期望像这样的属性对象列表

List<PropertyViewModel> dataVm = new List<PropertyViewModel>();
{
            foreach (Property p in x)
            {
                dataVm.Add(new PropertyViewModel(p));
            }
            return dataVm;
}

现在在我正在使用的同一个班级

public PropertyViewModel(Property x)
        {
            Id = x.Id;
            Created = x.Created;
            Title = x.Title;
             ....
            Photo = x.Photos.First();
}

但是使用这种方法将对象集合发送到视图模型,从那里返回相同的视图模型,只需要我需要的几个属性,奇怪的是(至少对我来说)我经历了多个实体负载和持续时间急剧增加。

如果您需要更多信息。请问。

如果您知道更好的解决方案,请分享。

更新: 使用域模型时,我加载了 20 个实体,而在使用上述视图模型时,加载了 67 个实体,这大大降低了性能。

【问题讨论】:

  • 您知道 ORM 的 n+1 问题吗?这是最常见的问题之一,您检查过对数据库的调用次数吗?
  • @marcos.borunda 可能,我会尽快检查。

标签: c# asp.net-mvc-3 nhibernate viewmodel view-model-pattern


【解决方案1】:

在域模型和视图模型之间的映射确实会花费额外的时间,但这个时间会非常小,绝对不会成为任何瓶颈。在 C# 中调用属性设置器是一种非常快速的操作,与例如数据库调用相比绝对可以忽略不计。

所以请继续使用视图模型,而不必担心这会以某种方式影响您的应用程序的性能。

【讨论】:

    【解决方案2】:

    不同的视图会有不同的视图模型。如果视图不需要大量数据,则不应将其包含在该视图的视图模型中。

    还要检查选择 N+1 个问题,如果您还没有提高引用实体的检索效率,请考虑为类和集合设置批量大小。

    【讨论】:

      【解决方案3】:

      您不应该注意到任何瓶颈,因为 ViewModels 听起来像是调用数据库的性能问题,n+1 问题是 ORM 的一个非常常见的性能问题,您应该检查调用次数数据库。 Entity Framework Profiler 是一个非常好的 EF 调试器,它会显示对数据库的调用次数,如果性能不好,它会建议你如何改进它。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-06-22
        • 2018-12-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多