PagedList搜索效率低下

时间:2014-11-14 10:24:11

标签: asp.net-mvc asp.net-mvc-3 pagedlist

我正在尝试在超过1万条记录上实现搜索功能。使用PagedList时遇到速度问题。

public ActionResult CrmBlogGroupType(int? page, bool? Name, bool? AuthorTitle, bool?    Description, string search, int? PageSize, string type)
{
    try
    {
    if (type==null)
    {
        type = "A";
    }
    IEnumerable<Usp_getBlogSetPosts_Result> _objBlogSet = _dataLayer.GetBlogSet(type);
    //The above _objBlogSet has around 10 thousand records

    ViewBag.CurrentPage = page;

    ViewBag.Name = Name ==null?false:Name;
    ViewBag.AuthorTitle = AuthorTitle == null ? false : AuthorTitle;
    ViewBag.Description = Description == null ? false : Description;

    ViewBag.Search = search;
    ViewBag.type = type;

    if (Name == true && AuthorTitle == false && Description == false)
    {
        _objBlogSet = _objBlogSet.Where(p => p.author_name.ToLower().Contains(search.ToLower())).ToPagedList(page ?? 1, PageSize ?? 10);
    } 

    return View(_objBlogSet);

    catch (Exception ex)
    {
        throw ex;
    }
}

2 个答案:

答案 0 :(得分:1)

我假设您正在使用Troy Goode的分页列表(https://github.com/TroyGoode/PagedList

不要使用IEnumerable,而是尝试使用IQueryable。 这样,分页就在服务器端完成,性能会更好。

答案 1 :(得分:0)

这完全取决于_dataLayer.GetBlogSet()中发生的事情。您当前的代码很可能会拉入整个表格,并在内存中过滤该数据。

该方法应返回IQueryable<Usp_getBlogSetPosts_Result>,因此该集合上的ToPagedList()内部Skip()Take()将转换为SQL查询。