当从executequery()调用返回大量(例如超过625,000)条记录时,是否需要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秒才能成功完成。
答案 0 :(得分:1)
我并不感到惊讶。
为了清楚起见,您正在尝试通过线路移动超过625,000条记录,然后从中创建实体。服务器上的查询可能非常快,但是这些记录中的每一个都需要序列化为json,通过线路发送,然后重新构建为实体。即使具有最佳实现,这些操作既耗时又耗费大量数据。
因此,您有一些选项可以减少内存占用和操作所需的时间。