2012-04-02 3 views
1

Я создаю сайт для фильма. Я использую mvc3 и структуру сущности. Я использую в основном LINQ to Entities для запроса базы данных. графический интерфейс сайта - это в основном одна страница просмотра, которая рядом с первой загрузкой я использую главным образом Ajax для обновления списка фильмов в соответствии с критериями поиска и т. д. Поэтому я использую один основной запрос. когда я проверяю это в режиме отладки, я вижу, что каждый раз выполнение запроса занимает 10 секунд, что, конечно, очень медленно. Я проиндексировал базу данных в соответствии с моими базовыми знаниями. здесь основной код запроса:медленная работа с использованием linq 2 объекта

var casts = MovieCasts.Where(d => 
      movieIds.Contains(d.MovieId) 
      && d.WorkingTitleId != null &&    
      actorAndActressWtIds.Contains((int)d.WorkingTitleId)).AsEnumerable() 
      .Where(d=>GetMoviesTop4CelebIds(d.MovieId).Contains(d.CelebId)) 
      .AsQueryable() 
      .Select(d =>new MCast 
      { 
       MovieId = d.MovieId, 
       Id = d.Id, 
       CelebId = d.CelebId, 
       CelebPageViews = d.Celebrity.PageViews, 
       ActingParts = string.Join(",",d.ActingParts.Select(e => e.Name)), 
       ActorName = HttpUtility.HtmlDecode(d.Celebrity.ShortName) ??    
          HttpUtility.HtmlDecode(d.Celebrity.BirthName), 
          }).ToList(); 

в GetMoviesTop4CelebIds() является функцией, которая приближается к базе данных напрямую и возвращает короткий список Int (celebId) в соответствии с фильмом Id. Вот почему я использовал первый AsEnumerable(), в противном случае он дал ошибку «LINQ to Entities не распознает метод и не может перевести ...» (забавная вещь, которую я должен упомянуть, это то, что мой код медленно работает в режиме отладки, когда я использовать точки останова и быстро, без него. Это находится в разработке. В производстве код очень медленный.) может ли кто-нибудь помочь мне затенять некоторый свет на код? Мне бы очень понравилось и нужно было улучшить производительность.

ответ

2

Вызов AsEnumerable() выполнит запрос Linq to Entities в этой точке и приведет к тому, что остальная часть операции будет выполнена с использованием Linq для объектов. Попробуйте выполнить команду GetMoviesTop4CelebIds() отдельно до. Вы выполняете этот запрос и используете результирующие значения в запросе вместо вызова метода.

+1

Оцените меня Я попробую –

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