Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net BreezeJS:通过executequery()检索大量记录==System.OutOfMemoryException_.net_Entity Framework_Breeze_Entity Framework 6 - Fatal编程技术网

.net BreezeJS:通过executequery()检索大量记录==System.OutOfMemoryException

.net BreezeJS:通过executequery()检索大量记录==System.OutOfMemoryException,.net,entity-framework,breeze,entity-framework-6,.net,Entity Framework,Breeze,Entity Framework 6,调用executequery()返回大量(例如超过625000条)记录时是否预期System.OutOfMemoryException 使用take()可以很好地工作,例如 var query = breeze.EntityQuery .from("Biography") .select("ENTITY_ID, NAME, NICKNAME") .where("VAL1","==","AL") .orderBy("ENTITY_ID") .take(100

调用executequery()返回大量(例如超过625000条)记录时是否预期System.OutOfMemoryException

使用take()可以很好地工作,例如

var query = breeze.EntityQuery
    .from("Biography")
    .select("ENTITY_ID, NAME, NICKNAME")
    .where("VAL1","==","AL")
    .orderBy("ENTITY_ID")
    .take(1000);
但是,请求所有记录会导致System.OutOfMemoryException错误

var query = breeze.EntityQuery
    .from("Biography")
    .select("ENTITY_ID, NAME, NICKNAME")
    .where("VAL1","==","AL")
    .orderBy("ENTITY_ID");
运行等效的SQL大约需要5秒钟才能成功完成。

我并不感到惊讶

需要明确的是,您正在尝试通过网络移动超过625000条记录,然后从中创建实体。服务器上的查询可能非常快,但是这些记录中的每一条都需要序列化为json,通过网络发送,然后重新组合为一个实体。即使使用最好的实现,这些操作对于大量数据来说也可能既耗时又占用大量内存

因此,您有一些选项可以减少内存占用和操作所需的时间

  • 使用take(根据您的示例)
  • 使用EntityQuery.noTracking选项。这跳过了将序列化记录转换为“true”实体的步骤。如果以后需要“true”实体,可以根据需要有选择地将它们添加到EntityManager中

  • 您的问题是什么?当遇到System.OutOfMemoryException时,组合使用skip()和take()的多个查询结果的最佳解决方案是什么?我组合了这两个选项,并将以下内容放在查询变量赋值的末尾:take(500000).noTracking();这是可行的,但是超过500000会导致相同的内存不足异常。我想我会尝试多次查询,使用skip()和take(),每次都向数组中添加记录,除非有其他方法。有没有更好的主意?