gpt4 book ai didi

c# - 替代 .ToList() 以返回大量数据?

转载 作者:太空狗 更新时间:2023-10-29 23:29:03 50 4
gpt4 key购买 nike

我有一个返回超过 21200 万行的查询。我尝试使用 .ToList() 但它显然进入了 OutOfMemoryException。我的案例的最佳替代方案是什么?

我也尝试过使用 Skip(fetchedrows).Take(1000).ToList() 但是在跳过阶段时性能真的很慢并且查询永远不会结束。

最佳答案

如果可能,返回一个可枚举的。这样您就可以继续向前(并且仅向前)滚动浏览过多的行,而无需立即将其放入内存,这很可能永远行不通。如果实现正确(这也取决于您的数据源),您可以一次读取和处理一行,几乎不使用内存。

有很多技术可以做到这一点,但我经常使用的最简单的方法是 yield return,它会生成自己的状态机。

现在的 Entity Framework 确实会自己流式传输结果。您唯一 应该做的是调用 ToList() 或类似的方法,这些方法会将数据库中的所有行加载到内存中。只需迭代结果,就好像它们是常规集合一样。 (对于 EF6 和更早版本,您可以使用 AsStreaming() 扩展方法。)如果这对您不起作用,您可以随时恢复到 DataReader,您可以在其中逐行读取和返回。

关于c# - 替代 .ToList() 以返回大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42494192/

50 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com