Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ViewModel是否会降低web应用程序的性能_C#_Asp.net Mvc 3_Nhibernate_Viewmodel_View Model Pattern - Fatal编程技术网

C# ViewModel是否会降低web应用程序的性能

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

据我所知,使用视图模型可以使web开发人员的生活更加轻松,因为我们可以使用这种方法在本地化字符串中只显示所需的属性。我还在mvc3视图模型中使用jquery验证等

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

 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();
}