我在我的视图中使用foreach
来遍历我的强类型模型并显示一个表。只有25行和7列,大约需要280毫秒。这似乎很慢。有什么性能诀窍,我应该知道在视图中使用循环?为什么我的foreach在ASP.NET MVC视图中循环如此缓慢?
编辑:我的控制器从Azure表中获取数据并使用ViewModel模式将其提供给视图。我不知道这是否重要,但我的视图是在VB中,我的模型是在C#中。所以,他们在单独的项目。我会想出一个精简的例子来发布,但我现在已经走出了门,今晚晚些时候将不得不去做这件事。我希望在人们周末回家之前赶上StackOverflow的人群,所以我原来的帖子很快就没有示例代码。
编辑:我确认与提琴手,没有懒加载发生。视图渲染过程中没有Fiddler活动。
编辑:如果我用Azure表中的数据提供视图,则需要280毫秒。如果我使用与Azure表中的实际数据相似的假数据提供相同的视图,则需要60毫秒。无论哪种情况,Controller都会填充ViewModel对象并将其传递给View。两个实例都使用相同的ViewModel类。我不明白。
编辑:我想我想通了。如果我一开始就包含代码,这对其他人来说可能是显而易见的。这里是我的ViewModel:
public class EmployeeChildrenViewModel
{
public Employee employee;
public IEnumerable<Child> children;
}
如果我通过上面的视图模型以我看来,foreach
需要280毫秒。如果我先用children.ToList()
填充上面的ViewModel,那么视图只需要60毫秒。但是,经过进一步调查,我发现无论哪种情况,整个页面加载时间都是相同的。我猜这是没有关系,如果IEnumerable迭代在我的控制器或我的看法,因为整体效果是相同的。我仍然不确定在children
上迭代的结果是什么,因为我确信它不会触及数据库,正如Fiddler所确认的那样。
告诉我们你遍历什么,也许这是很重的东西,你没有意识到这一点。你没有给我们关于这个问题的信息。 – Karl 2009-10-09 21:09:10
向我们展示一些代码? – 2009-10-09 21:11:17
@ eu-ge-ne&@Karl:对不起,我一开始应该这样做。代码现在发布。 – royco 2009-10-10 17:28:59