5

据我所知,使用视图模型可以使 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 个实体,这大大降低了性能。

4

3 回答 3

3

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

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

于 2012-05-29T06:28:12.017 回答
1

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

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

于 2012-05-29T08:47:57.223 回答
0

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

于 2012-05-29T18:11:16.890 回答