1

현재 ASP.NET MVC 3 프로젝트에서 Entity Framework를 사용하고 있습니다. 그리고보기에 레코드를 반복하면서 심각한 성능 문제가 발생했습니다.Entity Framework 4.1 성능 문제

데이터가 빠르게 수신되고 있으므로 원격 Oracle 서버에 연결되어 있지 않으며 사용중인 모델에 게으른로드 관계가 없지만 각 레코드는 간단한 처리를 위해 120-300ms가 소요됩니다. 액션 링크가있는 3 개의 필드 출력.

현재 800,000 개의 레코드가있는 페이지를로드하는 데 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 
+1

더 자세히 알려 주셔야합니다. 어떻게 모델을 채우고 있습니까? MVC.Reports.Results 란 무엇입니까? –

+0

'Model'이 생성 될 때 쿼리가 실제로 실행되고 있습니까? 예를 들어, 그 때 ToList()를하고 있습니까? –

+1

그리고 이것은 아주 작은 것입니다. 그러나 멈춤 식 감시의 선언 줄을 루프 바깥쪽으로 옮겨야합니다. –

답변

2

내 생각 엔 MVC.Reports.Results(sp.Id)는 DB 조회의 일종을 수행하고 있다는 것이다 당신이로 전송하기 전에 목록으로 모델을 변환하기 때문에 보기, 이제 각 레코드에 대해 데이터베이스에 다시 기록해야합니다. 800 레코드의 페이지를 만들려면 하나의 레코드 대신 801 개의 별도의 레코드가 필요합니다.

  1. 첫 번째 쿼리에서 ToList()를 제거하십시오.
  2. Refactor MVC.Reports.Results (sp.Id) int 대신 개체를 가져오고 해당 메서드 내에서 개체에서 직접 작업합니다.

위의 두 가지 모두 사용자가 엔티티 컨텍스트 범위를 작업 내에서 컨트롤러로 이동해야 할 수도 있습니다.

+0

전에 타이머 출력을 움직여 actionlink를 호출하기 전에 –

+0

타이머가 제거되는 중입니다. 성능 문제의 근본 원인을 찾기 위해 일시적으로 만 넣었습니다 –

+0

컨텍스트가 현재 컨트롤러에 대해 전역이지만 아프지 다른 제안을 시도하고 다시 당신에게 –

관련 문제