【问题标题】:slow performance using linq 2 entities使用 linq 2 实体的性能缓慢
【发布时间】:2012-04-15 21:01:59
【问题描述】:

我正在建立一个电影网站。我正在使用 mvc3 和实体框架。我主要使用 LINQ to Entities 来查询数据库。站点 GUI 基本上是一个视图页面,除了第一次加载之外,我主要使用 Ajax 根据搜索条件等刷新电影列表。所以我使用一个主要查询。当我在调试模式下检查时,我发现每次执行查询需要 10 秒,这当然非常慢。我已经根据我的基础知识对数据库进行了索引。以下是主要查询代码:

 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() 是一个直接接近数据库并根据电影 ID 返回一个 int (celebId) 的简短列表的函数。这就是我使用第一个 AsEnumerable() 的原因,否则它会给出错误“LINQ to Entities 无法识别该方法并且无法翻译...” (我应该提到的一件有趣的事情是,当我使用断点时我的代码在调试模式下很慢,而没有它时速度很快。这是在开发中。在生产中代码非常慢。) 任何人都可以帮我在代码上遮住一些光吗?我真的很喜欢并且需要提高性能。

【问题讨论】:

    标签: performance linq linq-to-entities


    【解决方案1】:

    调用AsEnumerable() 将在此时执行 Linq to Entities 查询,并导致使用 Linq to Objects 执行其余操作。尝试单独执行GetMoviesTop4CelebIds()执行此查询并在查询中使用结果值而不是方法调用。

    【讨论】:

      猜你喜欢
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多