繁体   English   中英

ASP.NET MVC - Kendo Grid 慢分页

[英]ASP.NET MVC - Kendo Grid slow paging

我正在使用 Kendo Grid 来显示我的数据,但是当我加载 500K 记录时,分页非常慢。 更改页面时,会调用 Read 函数,从而调用每次检索所有 500K 记录的数据库。

看法

@Html.Kendo().Grid<MyViewModel>()
        .Name("grid")           
        .Columns(c=>
        {           
            c.Bound(model => model.UserId);
            c.Bound(model => model.UserName);
            c.Bound(model => model.Email);
        })
        .Filterable()
        .Sortable()           
        .DataSource(dataSource => dataSource
            .Ajax()
            .Read(read => read.Action("ReadData", "Home").Data("filters"))
            .PageSize(30)            
        )                   

控制器

public ActionResult ReadData([DataSourceRequest] DataSourceRequest request, string searchText)
{
    var data = GetData(searchText).ToList();

    return Json(data.OrderBy(x=>x.UserId).ToList().ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

我可能做错了什么?

我建议首先尝试在数据端而不是代码端进行排序,看看是否有帮助。 但是我认为如果您每次用户更改页面时都检索 500k 记录并移动它们,这将无法解决问题。 这就是客户端分页在剑道中的工作方式。

第二种选择是使寻呼服务器端。 您可以查看这篇文章以了解如何实现:

如何在asp.net mvc的客户端Kendo UI网格中实现服务器端分页

关于剑道网格性能和分页的来源: https : //www.telerik.com/blogs/how-to-get-the-best-grid-performance

希望能帮助到你!

在研究一个不同的问题时遇到了这个问题,但你的问题很明显:你正在做.ToList()这会导致在.ToDataSourceResult开始分页和排序之前获取所有记录(它需要一个 IQueryable)。

所以你的 GetData 需要返回一个 IQueryable 和重构操作:

public ActionResult ReadData([DataSourceRequest] DataSourceRequest request, string searchText)
{
    var data = GetData(searchText);

    // Add a default sort if none is selected, otherwise use the user selected sort
    if (request.Sorts.Count == 0)
    {
        request.Sorts.Add(new SortDescriptor("UserId", ListSortDirection.Ascending));
    }

    // Will add `Take`, `Skip`, `OrderBy`, etc. before sending to server
    return Json(data.ToDataSourceResult(request), JsonRequestBehavior.AllowGet);
}

为什么不能使用 Endless Scrolling,每次向下滚动时都会记录一堆记录(您可以根据需要获取)?

参考链接: https : //demos.telerik.com/aspnet-mvc/grid/endless-scrolling-remote

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM