C# 实体框架4.1性能问题

C# 实体框架4.1性能问题,c#,asp.net-mvc-3,entity-framework,entity-framework-4.1,ef-code-first,C#,Asp.net Mvc 3,Entity Framework,Entity Framework 4.1,Ef Code First,我目前正在ASP.NETMVC3项目中使用实体框架。 在视图中循环记录以显示它们时,我遇到了严重的性能问题 数据接收速度很快,因此我知道这不是到远程oracle服务器的连接,而且我使用的模型中没有延迟加载关系,但是每个记录都需要120-300毫秒来处理一个简单的3字段输出和一个操作链接 目前,加载包含800ish记录的页面需要3分钟以上的时间 我尝试过调整配置选项,但似乎没有任何帮助 有人有什么想法吗 编辑:控制器代码 readonly OracleSampleManagerContext db

我目前正在ASP.NETMVC3项目中使用实体框架。 在视图中循环记录以显示它们时,我遇到了严重的性能问题

数据接收速度很快,因此我知道这不是到远程oracle服务器的连接,而且我使用的模型中没有延迟加载关系,但是每个记录都需要120-300毫秒来处理一个简单的3字段输出和一个操作链接

目前,加载包含800ish记录的页面需要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>

我的猜测是,
MVC.Reports.Results(sp.Id)
执行某种db查找,并且由于您在将模型发送到视图之前将其转换为列表,因此现在您必须再次访问数据库,因为每个记录都需要一个包含800条记录的页面,因此需要801次单独的数据库访问,而不是一次

  • 从第一个查询中删除ToList()
  • 重构MVC.Reports.Results(sp.Id)以获取对象而不是int,并在该方法中直接处理对象

  • 上述两种情况都可能要求您将实体上下文的范围从操作中移出到控制器。

    您需要向我们展示更多内容。如何填充模型?MVC.Reports.Results()在做什么?在创建
    Model
    时是否实际执行查询?例如,您当时是否正在执行
    ToList()
    ?这是一个很小的挑剔,但是您应该将秒表的声明行移到循环之外。无论如何,您应该启用分页。如果禁用或减小页面大小,每页800条记录太多。这并不是说您的优化不好,而是在您优化了缓慢的内容之后,每页显示的记录也会减少;-)<代码>@Html.ActionLink(sp.Id,MVC.Reports.Results(sp.Id))?在视图中获取数据?性能问题是这段代码中最小的问题。视图用于显示数据,而不是获取数据。或者可能我弄错了,这是T4模板?在你做所有这些之前,你可以在调用ActionLink之前将计时器输出移动到。计时器正在被删除,只是暂时放在那里,以找到性能问题的根本原因。环境目前对控制器来说已经是全局的,但我会尝试你的其他建议,然后返回据你所知,2/3的问题是由于我们的vpn服务器上的网络问题,因为我在家里测试,但帖子确实有部分帮助,所以我给你的答案代表=)
    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