gpt4 book ai didi

c# - C#/.NET 的惰性流

转载 作者:太空狗 更新时间:2023-10-30 01:28:00 26 4
gpt4 key购买 nike

有人知道 .net 中的惰性流实现吗? IOW,我想要一个创建这样的方法:

public Stream MyMethod() {
return new LazyStream(...whatever parameters..., delegate() {
... some callback code.
});
}

当我的其他代码调用 MyMethod() 返回检索流时,它实际上不会执行任何工作,直到有人真正尝试从流中读取。通常的方法是让 MyMethod 将流参数作为参数,但这在我的情况下不起作用(我想将返回的流提供给 MVC FileStreamResult)。

为了进一步解释,我正在寻找的是创建一系列分层的转换,所以

数据库结果集=(转换为)=> 字节流=(链接到)=> GZipStream =(传递给)=> FileStreamResult 构造函数。

结果集可能很大 (GB),所以我不想将结果缓存在 MemoryStream 中,我可以将其传递给 GZipStream 构造函数。相反,我想在 GZipStream 请求数据时从结果集中获取数据。

最佳答案

大多数流实现本质上都是惰性流。通常,在流的用户请求之前,任何流都不会从其源读取信息(除了一些额外的“过度读取”以允许发生缓冲,这使得流的使用速度更快)。

通过重写 Read 可以很容易地实现直到必要时才读取的 Stream 实现打开底层资源,然后在使用时从中读取,如果你需要一个完全懒惰的流实现。只需覆盖 Read、CanRead、CanWrite 和 CanSeek。

关于c# - C#/.NET 的惰性流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1711421/

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