我正在使用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));
}
答案 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();
}
}