实体框架性能问题

时间:2015-06-25 13:18:23

标签: c# .net asp.net-mvc performance entity-framework

我遇到问题,下面的查询需要大约700毫秒来执行。它处于一个循环中并被调用100次以上,因此它将永远消失。

型号:

public class ReleaseDates
{
    public int Id { get; set; }
    public string MovieName { get; set; }
    public string Country { get; set; }
    public DateTime ReleaseDate { get; set; }
    public string AlternateSource { get; set; }
}

查询:

public async Task<List<ReleaseDates>> GetReleaseDatesAsync(string movieName)
{
    return await Db.ReleaseDates.Where(x => x.MovieName == movieName && string.IsNullOrEmpty(x.AlternateSource)).ToListAsync();
}

有关如何提高速度的建议吗?

2 个答案:

答案 0 :(得分:3)

摆脱循环。这就是问题所在。您正在向数据库发送大量查询。

将您要搜索的所有电影名称存储在一个列表中并在那里包含。

public async Task<List<ReleaseDates>> GetReleaseDatesAsync(List<string> movieNames)
{
    //movie names that you're searching for - movieNames

    return await Db.ReleaseDates.Where(x => movieNames.Contains(x.MovieName) && string.IsNullOrEmpty(x.AlternateSource)).ToListAsync();

}

如果您想获得&#34; Ant Moon&#34;,&#34; GodZippa&#34;,&#34; SuperWan&#34;的发布日期,您的列表将包含这些字符串,这就是它

进一步阅读:http://blogs.msdn.com/b/alexj/archive/2009/03/26/tip-8-writing-where-in-style-queries-using-linq-to-entities.aspx

答案 1 :(得分:2)

在电影名称字段中创建索引。此外,通过分析器捕获查询并在启用了“显示计划”的Sql Management Studio中执行该查询。它将为您提供一些优化查询性能的见解。