在.net mvc中分页时如何解决性能问题?

时间:2017-01-10 21:17:18

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

我正在使用PagedList.MVC nuget, 每次点击下一个按钮都需要大约10秒钟。 我已经看到PagedList中有大约350,000个结果,每次我点击下一个按钮时,它会再次查看所有结果。我该怎么解决这个问题?

这是代码。

public ActionResult Index(int? page)
        {
            List<Item> items;
            using (var db = new DBDevEntities())
            {
                items= db.items.ToList(); 
            }

            var pageNumber = page ?? 1;

            return View(items.ToPagedList(pageNumber, 25));
        }

1 个答案:

答案 0 :(得分:4)

db.items.ToList();正在将所有350,000条记录加载到内存中,然后您将在代码中对其进行过滤。您需要使用.Skip().Take()进行分页数据库。

编辑:显然,PagedList.MVC处理此问题,您只需将其保留在IQueryable中,而不是调用.ToList()。来自https://github.com/TroyGoode/PagedList

public class ProductController : Controller
{
    public object Index(int? page)
    {
        var products = MyProductDataSource.FindAllProducts(); //returns IQueryable<Product> representing an unknown number of products. a thousand maybe?

        var pageNumber = page ?? 1; // if no page was specified in the querystring, default to the first page (1)
        var onePageOfProducts = products.ToPagedList(pageNumber, 25); // will only contain 25 products max because of the pageSize

        ViewBag.OnePageOfProducts = onePageOfProducts;
        return View();
    }
}