【问题标题】:High memory usage solutions with streams使用流的高内存使用解决方案
【发布时间】:2021-06-27 16:56:26
【问题描述】:

我有一个关于如何在 C# 中解决高内存使用问题的问题。

假设我在数据库中有很多项目数据。我想阅读所有内容,然后将该数据写入单独的文件并将其存档到 zip 文件中。如果我一次从数据库中获取所有项目数据,应用程序将超时,因为所有内存都已使用。
我们在 node js 应用程序中所做的事情是找到一个方便的库,并使用 AsyncEnumerable 并将项目数据以较小的片段流式传输到写入流。
所以我的问题是它是如何在 C# 中完成的?因为我还没有找到如何通过实体框架流式传输数据的选项?它是如何解决的,任何人都可以提供一些可以使用的代码 sn-ps/示例,是 IQueryable 还是其他? 我对当时如何从流中读取 10000 个元素的数据感兴趣。

【问题讨论】:

    标签: c# sql-server entity-framework asp.net-core .net-core


    【解决方案1】:

    默认情况下,数据在 EF 中流式传输,您无需执行任何操作。将整个响应存储在内存中的是 ToList() 和朋友,如果您仅枚举可查询对象,它将处理枚举器中的任何流。

    【讨论】:

    • EF 能否使用流处理 2G(或更多)的 blob 属性?我知道它可以使用 byte[] 但你永远不会有一个带有 byte[] 的端到端流
    • EF 是面向“实体”的,因此您一次流式传输一个实体。所以拥有 2GB 的实体不是很实用。对于流式 blob,您必须下拉到 ADO.NET:docs.microsoft.com/en-us/dotnet/framework/data/adonet/…
    • @DavidBrowne-Microsoft - 谢谢,我就是这么想的。我认为这是一个很大的缺失功能(实际上我不使用 EF 的主要原因)。
    • 有没有办法限制最大内存使用的大小?
    猜你喜欢
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    • 2014-01-09
    相关资源
    最近更新 更多