我有这个代码
foreach (var e in await database.Entities.Where(...).ToListAsync())
据我了解,此代码不需要将查询结果复制到新创建的列表中,这是我不需要的开销。我只需要对结果进行一次迭代,并且如果将其保留在EF内部结构中就可以了。
另一方面,我可以使用它
foreach (var e in database.Entities.Where(...))
但是此代码将同步运行,这也会对性能产生一些意想不到的影响。
没有冗余副本的异步获取结果的最佳方法是什么?
答案 0 :(得分:3)
此代码具有将查询结果复制到新创建的列表中的不必要的开销,
是的,但这是引用类型的列表。它不会复制任何实体对象本身或类似的东西,而只是复制引用列表,这非常快并且不会占用太多内存。
没有冗余副本的异步获取结果的最佳方法是什么?
Asynchronous streams。但是它们还不适用于EF。因此,今天 的最佳方法是ToListAsync
。