当我将ViewModel对象传递给ASP.NET MVC视图页面时,NHProf生成'从视图'执行的'此语句'警告
我刚刚注意到,在我的网站的一个页面上,我将ViewModel传递给我的View页面,NHProf发出以下警告:
此视图从视图执行,可能导致性能不佳和/或脆弱行为。
然后链接到此页面:http://nhprof.com/Learn/Alerts/QueriesFromViews
我的ViewModel只包含2个属性:
public IEnumerable<Photo> Photos { get; set; }
public Photo SelectedPhoto { get; set; }
我将照片分配给Controller中的ViewModel,如下所示:
PhotoViewModel myViewModel = new PhotoViewModel();
myViewModel.Photos = entity.Photos;
My View显然继承了这种类型,除了输出一个标题(使用SelectedPhoto
对象)之外,它只是循环遍历每个Photos
为每个标题呈现一些内容。
NHProf将“问题”查询显示为在我的视图中检索我正在循环的照片集合的位置,尽管我没有明确告诉它从我的视图中获取这些记录 - 我已通过我的ViewModel的Photos
属性中的那些记录。
我有其他页面,我不需要传递ViewModel,我只是将IEnumerable<Photo>
传递给View,然后渲染标记与我在问题视图中完全相同,并且NHProf不会发出警告(因为不应该be)在那种情况下。
我想也许它与Lazy Loading有关,因为我的集合是ViewModel的一部分,当我在ViewModel类型中循环遍历Photos
属性时,它会在那时获取那些记录?
有谁知道这里发生了什么?该网站运行完美,但NHProf只是看到它正在做一些不应该做的事情?!
没有找到相关结果
已邀请:
2 个回复
系漏
集合是如何填充的,但我认为它就像
一样简单。如果这是正确的(或类似的东西),那么您只是将延迟加载的实体集合分配给视图模型。 有几种方法可以解决这个问题,但它们基本相同:在填充视图模型之前,需要触发加载集合。最简单的方法是将
或等效物粘贴到您指定的集合上;这会强制取一个。
社攻取墟槽