C# ViewModel是否会降低web应用程序的性能
据我所知,使用视图模型可以使web开发人员的生活更加轻松,因为我们可以使用这种方法在本地化字符串中只显示所需的属性。我还在mvc3视图模型中使用jquery验证等 现在我有点怀疑,因为我的webapp中有一个真正的瓶颈。像这样查询所有对象(其中20个)C# ViewModel是否会降低web应用程序的性能,c#,asp.net-mvc-3,nhibernate,viewmodel,view-model-pattern,C#,Asp.net Mvc 3,Nhibernate,Viewmodel,View Model Pattern,据我所知,使用视图模型可以使web开发人员的生活更加轻松,因为我们可以使用这种方法在本地化字符串中只显示所需的属性。我还在mvc3视图模型中使用jquery验证等 现在我有点怀疑,因为我的webapp中有一个真正的瓶颈。像这样查询所有对象(其中20个) List<Domain.Property> data = session.Query<Domain.Property>().ToList(); return PropertyViewModel.FromDoma
List<Domain.Property> data = session.Query<Domain.Property>().ToList();
return PropertyViewModel.FromDomainModel(data);
List<PropertyViewModel> dataVm = new List<PropertyViewModel>();
{
foreach (Property p in x)
{
dataVm.Add(new PropertyViewModel(p));
}
return dataVm;
}
但是,使用这种方法将对象集合发送到viewmodel,从那里返回相同的viewmodel,并且只返回我需要的几个属性,因此(至少对我来说)我的多实体负载和持续时间急剧增加
如果你需要更多信息。请问
另外,如果你知道更好的解决方案,请分享
更新:
当使用域模型时,我加载了20个实体,当使用上面描述的viewmodel时,加载了67个实体,这大大降低了性能。在域模型和视图模型之间的映射上确实会花费额外的时间,但这一时间会非常小,这绝对不是什么瓶颈在C#中调用属性设置器是一个非常快的操作,与数据库调用相比,它是完全可以忽略的
因此,请继续使用视图模型,不要担心这会影响应用程序的性能。不同的视图会有不同的视图模型。如果视图不需要大量数据,则不应将其包含在该视图的视图模型中
还检查是否选择N+ 1个问题,如果您还没有使引用的实体检索效率更高,考虑在类和集合上设置批处理大小。
,由于VIEW模型,您不应该注意到任何瓶颈,相反,这听起来像是调用数据库的性能问题,n+1问题是ORMs中非常常见的性能问题,您应该检查对数据库的调用次数。
是EF的一个非常好的调试器,它将显示对数据库的调用次数,如果性能不好,它将建议您如何改进它。您知道ORMs的n+1问题吗?这是最常见的问题之一,您检查过数据库的呼叫数吗?@marcos.borunda可能,我会尽快检查。
public PropertyViewModel(Property x)
{
Id = x.Id;
Created = x.Created;
Title = x.Title;
....
Photo = x.Photos.First();
}