如何从我的数据库加载更快的值

时间:2016-05-07 07:17:43

标签: c# asp.net asp.net-mvc

public static IEnumerable<Student> GetStudents()
{
    List<Student> students = (List<Student>)HttpContext.Current.Cache.Get("GetAllStudentWithImg");

    if (students!= null)
    {
        return students ;
    }

    students = new List<Student>();

    using (PrincipalContext context = GetPrincipalContext())
    {
        using (UserPrincipal uprinc = new UserPrincipal(context))
        {
            using (PrincipalSearcher psearcher = new PrincipalSearcher(uprinc))
            {
                students = psearcher.FindAll()
                                    .Select(x => new Student((DirectoryEntry)x.GetUnderlyingObject()))
                                    .ToList(); 
            }
        }
    }

    HttpContext.Current.Cache.Add("GetAllStudentWithImg", students, null, 
                                  DateTime.UtcNow.AddMinutes(60), 
                                  System.Web.Caching.Cache.NoSlidingExpiration,
                                  System.Web.Caching.CacheItemPriority.Normal, null);

    return students;
}

我创建了这个函数来从我的数据库获取值并且它工作但是它加载缓慢,图片不是那么多或者很大,所以它不是内容,我想知道是否有人想帮助我改进我的代码?< / p>

3 个答案:

答案 0 :(得分:1)

我没有看到你的所有代码,你没有显示查询数据库的代码,但我认为问题在于:

psearcher.FindAll().Select( ....

FindAll()返回数据库表中的所有记录,然后在集合中选择所需的内容。

更好的性能解决方案是:仅向数据库查询您需要的内容。

然后找不到所有数据,但只找到你需要的数据

答案 1 :(得分:1)

检查一下,findall和where:C# FindAll VS Where Speed之间的比较。

除此之外,为什么不在这些PrincipalContext,UserPrincipal和PrincipalSearcher之间使用继承?

答案 2 :(得分:0)

FindAll()不是Linq方法。它是List(Of T)方法,因此,它没有Deffered执行,而Whereli()是Linq并支持延迟执行。