1

В настоящее время я использую Entity Framework в проекте ASP.NET MVC 3. И у меня возникают серьезные проблемы с производительностью, когда вы просматриваете записи в представлении.Entity Framework 4.1 Проблемы с производительностью

Данные получены быстро, поэтому я знаю, что это не подключение к нашему удаленному серверу 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 
+1

Вам нужно будет показать нам больше. Как вы заселяете модель? Что такое MVC.Reports.Results()? –

+0

Действительно ли выполняется запрос, когда 'Model' создан? Например, вы делаете 'ToList()' в то время? –

+1

, и это крошечный nitpick, но вы должны переместить строку объявления секундомера на внешнюю часть цикла –

ответ

2

Я думаю, что MVC.Reports.Results(sp.Id) делает какой-то дб поиска, и так как вы преобразованы модель в список перед его отправкой в теперь вам нужно снова ударить базу данных для каждой записи. Чтобы сделать страницу из 800 записей, требуется 801 отдельных поездок в базу данных вместо одной.

  1. Удалите ToList() из первого запроса.
  2. Рефактор MVC.Reports.Results (sp.Id), чтобы взять объект вместо int и внутри этого метода работать с объектом напрямую.

В обоих вышеизложенных может потребоваться переместить область контекста ваших объектов из действия в контроллер.

+0

, прежде чем вы сделаете все, что вы можете переместить вывод таймера до вызова actionlink –

+0

таймер удаляется, он был временно помещен туда, чтобы найти основную причину проблемы с производительностью. –

+0

контекст в настоящее время является глобальным для контроллера, но плохо попробуйте другие предложения и вернитесь к вам –

Смежные вопросы