【问题标题】:multiple datatable on a page with more then 10,000 record loading slow页面上有多个数据表,超过 10,000 条记录加载缓慢
【发布时间】:2016-05-21 13:27:58
【问题描述】:

我在同一页面的不同选项卡上有 5 个数据表,我正在以相同的方法在页面加载时填充它们。我在mvc中首先使用实体​​框架,数据库

现在加载太慢了。是否有其他方法来加载它们,我正在考虑通过在选项卡单击上调用 action 方法从不同的方法填充它们?

谁能指出正确的方法。

谢谢,

【问题讨论】:

  • 你必须一次加载10.000条记录吗?
  • 不..我在它们每个上一次加载 25 个。但我的方法仍然是加载所有这些.. 我正在使用数据表。我做错了什么?

标签: c# jquery ajax model-view-controller


【解决方案1】:

如果不需要一次加载所有内容,那么:

  1. 仅加载活动选项卡的元素
  2. 仅加载一些元素(例如 10 或 50 个)并添加分页器

这应该会大大提高你的表现

【讨论】:

  • 你能把我链接到一个展示如何处理数据表的例子
  • 你能把代码贴在你加载数据表的地方吗?
  • 我已启用数据表服务器端处理。并为此添加了代码。它现在工作得很好。感谢您的帮助
【解决方案2】:

我为实现的目标的示例代码

jquery 代码

<script>
$(document).ready(function () {
    $("#myTable").DataTable({
        "processing": true, // for show progress bar
        "serverSide": true, // for process server side
        "filter": false, // this is for disable filter (search box)
        "orderMulti": false, // for disable multiple column at once
        "ajax": {
            "url": "/home/LoadData",
            "type": "POST",
            "datatype": "json"
        },
        "columns": [
                { "data": "ContactName", "name": "ContactName", "autoWidth": true },
                { "data": "CompanyName", "name": "CompanyName", "autoWidth": true },
                { "data": "Phone", "name": "Phone", "autoWidth": true },
                { "data": "Country", "name": "Country", "autoWidth": true },
                { "data": "City", "name": "City", "autoWidth": true },
                { "data": "PostalCode", "name": "PostalCode", "autoWidth": true }
        ]
    });
});

ASP.NET C# 代码 (MVC)

[HttpPost]
public ActionResult LoadData()
{

    var draw = Request.Form.GetValues("draw").FirstOrDefault();
    var start = Request.Form.GetValues("start").FirstOrDefault();
    var length = Request.Form.GetValues("length").FirstOrDefault();
    //Find Order Column
    var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault();
    var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();


    int pageSize = length != null? Convert.ToInt32(length) : 0;
    int skip = start != null ? Convert.ToInt32(start) : 0;
    int recordsTotal = 0;
    using (MyDatatableEntities dc = new MyDatatableEntities())
    {

        var v = (from a in dc.Customers select a);

        //SORT
        if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir)))
        {
            v = v.OrderBy(sortColumn + " " + sortColumnDir);
        }

        recordsTotal = v.Count();
        var data = v.Skip(skip).Take(pageSize).ToList();
        return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data }, JsonRequestBehavior.AllowGet);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-16
    • 2016-07-18
    • 2015-03-15
    • 1970-01-01
    • 1970-01-01
    • 2019-05-12
    • 1970-01-01
    相关资源
    最近更新 更多