如何在分页期间避免DB调用

时间:2014-06-17 13:29:30

标签: c# asp.net-mvc

我从数据库获得大约200K行。每次我点击分页它都会从DB获取记录。怎么避免呢?缓存??

public ActionResult Demo(int? page, string sortOrder, string recordSize)
{

    int pageSize = Convert.ToInt32(recordSize = string.IsNullOrEmpty(recordSize) ? "20" : recordSize);
    int pageNumber = (page ?? 1);

    var customers = DBHelper.GetCustomers();
    return View(customers.ToPagedList(pageNumber, pageSize));
}

1 个答案:

答案 0 :(得分:4)

您永远不应该撤回所有要缓存或使用的行。这只是太多的数据而且你会在这样做时获得巨大的性能提升。您应该尝试只撤回您实际想要使用的数据。

如果您使用的是LinqToSql或EntityFrameWork或类似的数据访问,则可以使用linq检索所需的页面。这将是最有效的解决方案,因为您不会撤回所有200k行。

var customers = Customers.Skip(pageIndex * pageSize).Take(pageSize);

Caching可以第二次提高检索速度,但是您的初始速度问题将是每次请求从数据库中撤回所有200k行。是的,您可以将它们全部拉回来,缓存它们并使用它们,但这不是一种理想的方法。理想的缓存是缓存每个页面,并依赖于前一页面,以便您可以正确地使缓存无效。