可查询的迭代:我需要ToListAsync()吗?

时间:2019-07-12 12:39:24

标签: c# entity-framework-core ef-core-2.2

我有这个代码

foreach (var e in await database.Entities.Where(...).ToListAsync())

据我了解,此代码不需要将查询结果复制到新创建的列表中,这是我不需要的开销。我只需要对结果进行一次迭代,并且如果将其保留在EF内部结构中就可以了。

另一方面,我可以使用它

foreach (var e in database.Entities.Where(...))

但是此代码将同步运行,这也会对性能产生一些意想不到的影响。

没有冗余副本的异步获取结果的最佳方法是什么?

1 个答案:

答案 0 :(得分:3)

  

此代码具有将查询结果复制到新创建的列表中的不必要的开销,

是的,但这是引用类型的列表。它不会复制任何实体对象本身或类似的东西,而只是复制引用列表,这非常快并且不会占用太多内存。

  

没有冗余副本的异步获取结果的最佳方法是什么?

Asynchronous streams。但是它们还不适用于EF。因此,今天 的最佳方法是ToListAsync