【发布时间】:2015-09-15 10:52:41
【问题描述】:
我正在创建 asp.net mvc 4 应用程序,在该应用程序中我将许多行加载到一个表中。
但是,此功能对于小型和平均数据集运行顺利,这意味着如果行数少于 1000 或少于 5000,则加载平均时间
该表的这个视图
但是当行数变高时,这意味着超过 5000 行,这需要太多时间才能将所有行加载到表中
这里是用于将值加载到表中的 LINQ 查询
public ActionResult StudentIndex()
{
return View(db._student.Where(x => x.Create_By == userid).OrderByDescending(s => s.Create_Date).ToList());
}
这里一旦将值加载到表中,使用 Jquery Table sorter 函数执行分页功能,我忽略了排序。
这是jquery脚本代码sn-p
<script type="text/javascript">
$(function () {
$("#table-hover")
.tablesorter({
widthFixed: true
})
.tablesorterPager({
container: $("#pager"),
size: $(".pagesize option:selected").val()
});
});
</script>
如何加快大型数据集的加载速度?我应该遵循什么方法?
【问题讨论】:
-
不要尝试一次加载这么多记录。有更好的插件(DataTables 是我熟悉的插件)支持服务器端分页。还有WebGrid 助手。
-
据我了解,一旦获取总行数 tablesorter 插件将这些结果除以 10 的一部分,然后是其当前值,这就是为什么它需要太多时间来加载大型数据集。
-
简而言之,您试图获取太多数据。在服务器上实现分页是您能够长期解决此问题的唯一方法。 EntityFramework 具有 Skip() 和 Take() 方法,可用于提取记录块而不是整个表。
-
如果我使用 EntityFramework Skip() 或 Take() 方法,我能否将 10 x 10 的块拉出?
-
您可以同时使用它们,因为它们映射到(大致)等效的 SQL 命令。 Skip() 将光标移动到相关行,然后 Take() “选择”指定的行数;它基本上是 TOP 或 LIMIT 和 OFFSET 子句,具体取决于使用的底层 SQL 系统。
标签: c# jquery asp.net-mvc linq asp.net-mvc-4