加载批量数据时抛出'System.OutOfMemoryException'

时间:2017-02-22 10:35:40

标签: json asp.net-mvc kendo-grid

enter image description here enter image description here

当我加载100,000行,其中包含20列intnt kendo网格时,我收到500错误。

所以我检查了json的响应,让内存超出异常。这是以下代码。

    In the webconfig,have set   

   <system.web.extensions>
        <scripting>
          <webServices>
            <jsonSerialization maxJsonLength="500000000"/>
          </webServices>
        </scripting>
      </system.web.extensions>




    This is the mvc controller.



  public JsonResult JqueryKendoGridVirtualScrolling()
                {

                    using (var s = new KendoEntities())
                    {
                        var x = s.premiumsbytreaties.ToList().Take(100000);

                        if (x != null)
                        {
                            var jsonResult = Json(x, JsonRequestBehavior.AllowGet);

                            jsonResult.MaxJsonLength = int.MaxValue;
                            return jsonResult;
                            //return Json(x.ToList(), JsonRequestBehavior.AllowGet);
                        }

                        else
                        {

                            return null;
                        }
                    };


                }

It is working fine for 6 columns.But not working for 15 columns.

工作正常,有20,000,000条记录,请参阅输出

enter image description here

1 个答案:

答案 0 :(得分:0)

这里有两个问题:

  1. 对于HTTP响应的JSON内容,500,000,000个字符太长。这需要时间来通过网络,这是在客户端浏览器可以解析和处理数据之前(花费时间和内存)。

    其中1%仍然太多。

  2. 使用Kendo对“Grid / Virtualization of remote data”的支持。

    在他们的示例中,操作的第一个参数是[DataSourceRequest] DataSourceRequest request,然后使用它(使用ToDataSource扩展方法)来创建响应。

    与支持Kendo网格(和其他控件)的AJAX方法一样 这些工作一起传递分页,排序和过滤参数和 在返回之前申请数据。

    如果您的数据是合适的数据库提供商的IQueryable<T>,那么这将是 发生在数据库上。