【发布时间】:2011-12-14 09:18:45
【问题描述】:
我目前在 ASP.NET MVC 3 项目中使用实体框架。 在循环浏览视图中的记录以显示它们时,我遇到了严重的性能问题。
数据正在快速接收,所以我知道这不是与我们的远程 oracle 服务器的连接,并且我正在使用的模型中没有延迟加载的关系,但每条记录需要 120-300 毫秒来处理一个简单的 3带有操作链接的字段输出。
目前加载包含 800 条记录的页面需要 3 多分钟。
我尝试使用配置选项进行调整,但似乎没有任何帮助。
有人有什么想法吗?
编辑:控制器代码
readonly OracleSampleManagerContext db = new OracleSampleManagerContext();
public virtual ActionResult Index()
{
var spList = db.SamplePoints.OrderBy(e=>e.Id).ToList();
return View(MVC.Reports.Views.SamplePointList, spList);
}
<h2>
Selection By Sample Point
</h2>
<table>
@foreach (var sp in Model)
{
System.Diagnostics.Stopwatch sw = new System.Diagnostics.Stopwatch();
sw.Start();
<tr>
<td>@Html.ActionLink(sp.Id, MVC.Reports.Results(sp.Id))</td>
<td>@sp.Description</td>
<td>@sp.PointLocation</td>
<td>@sw.ElapsedMilliseconds</td>
</tr>
sw.Stop();
sw.Reset();
}
</table>
例子:
0200 72" Sewer to river - Once through cooling water OUTFALLS 346ms
0400 66" Sewer to river - Combined effluent OUTFALLS 347ms
0500 54" Sewer to river - Once through cooling water OUTFALLS 388ms
06-AI-18 TBA in Water IB2 228ms
06-AI-31 TBA in Water IB2 172ms
【问题讨论】:
-
您将不得不向我们展示更多。你如何填充模型? MVC.Reports.Results() 在做什么?
-
在创建
Model时,查询是否真的在执行?比如你当时在做ToList()吗? -
这是一个小小的挑剔,但你应该将秒表的声明行移到循环之外
-
如果禁用或减小页面大小,您无论如何都应该启用分页,每页 800 条记录太多了。这并不是说你的优化不好,但是在你优化了慢的东西之后,每页显示的记录也更少;-)
-
@Html.ActionLink(sp.Id, MVC.Reports.Results(sp.Id))?在视图中获取数据?性能问题是这段代码最少的问题。视图用于显示数据,而不是用于获取。还是我弄错了,那是 T4 模板?
标签: c# asp.net-mvc-3 entity-framework entity-framework-4.1 ef-code-first