我刚刚注意到,在我的网站的一个页面上,我将一个 ViewModel 传递给我的视图页面,NHProf 给出了以下警告:
此语句从视图中执行,这可能导致性能不佳和/或行为脆弱。
然后链接到此页面: http: //nhprof.com/Learn/Alerts/QueriesFromViews
我的 ViewModel 仅包含 2 个属性:
public IEnumerable<Photo> Photos { get; set; }
public Photo SelectedPhoto { get; set; }
我将照片分配给我的控制器中的这个 ViewModel,如下所示:
PhotoViewModel myViewModel = new PhotoViewModel();
myViewModel.Photos = entity.Photos;
My View 显然继承了这种类型,并且除了输出一个标题(它使用SelectedPhoto
对象)之外,它只是循环遍历每个Photos
渲染的每个内容。
NHProf 将“问题”查询显示为它检索我在视图中循环浏览的照片集合的位置,尽管我没有明确告诉它关闭并从我的视图中获取这些记录 - 我已经通过Photos
我的 ViewModel 属性中的这些记录。
我有其他页面不需要传递 ViewModel,我只需传递IEnumerable<Photo>
给 View,然后渲染标记与我在问题视图中所做的完全相同,NHProf 没有给出警告(因为不应该有) 在那种情况下。
我在想它可能与延迟加载有关,并且因为我的集合是 ViewModel 的一部分,所以当我遍历Photos
ViewModel 类型中的属性时,它会在那时获取这些记录吗?
有谁知道这里发生了什么?该网站功能完美,但 NHProf 只是看到它正在做一些不应该做的事情?!