Linq 到 SQL。如何按行读取结果而不将所有记录放入内存
Linq to SQL. How to read results by row and without putting all records into memory
是否可以逐行读取 Linq to SQL 结果,而不将整个结果存入内存?类似于 OleDB DbDataReader.Read().
是的,这就是 LinQ 中 Deferred execution 的目标。使用 Entity Framework,您可以使用 linQ 和 IQueryable 进行查询。
是的。 LINQ 默认推迟执行。即,项目仅在枚举发生时从源中读取。如果您直接使用 foreach
(没有先调用 .ToArray()
或 .ToList()
),结果集将不会作为一个整体存储在内存中。
但是,由于对象跟踪存储每个正在加载的对象的信息,对于非常大的结果集,您仍然会遇到内存溢出。为避免这种情况,请设置 context.ObjectTrackingEnabled = false;
。作为副作用,您还会注意到性能提升。
是否可以逐行读取 Linq to SQL 结果,而不将整个结果存入内存?类似于 OleDB DbDataReader.Read().
是的,这就是 LinQ 中 Deferred execution 的目标。使用 Entity Framework,您可以使用 linQ 和 IQueryable 进行查询。
是的。 LINQ 默认推迟执行。即,项目仅在枚举发生时从源中读取。如果您直接使用 foreach
(没有先调用 .ToArray()
或 .ToList()
),结果集将不会作为一个整体存储在内存中。
但是,由于对象跟踪存储每个正在加载的对象的信息,对于非常大的结果集,您仍然会遇到内存溢出。为避免这种情况,请设置 context.ObjectTrackingEnabled = false;
。作为副作用,您还会注意到性能提升。