有没有办法
IEnumerable<T>
然后像这样把它作为一个可读的流发出?
private void DoTheThing(IEnumerable<Foo> foos)
{
using (var myStream = foos.EmitAsStream(f =>
{
var line = JsonConvert.SerializeObject(f);
return line;
}))
using(var streamReader = new StreamReader(myStream))
{
while (!streamReader.EndOfStream)
{
var line = streamReader.ReadLine();
Console.WriteLine(line);
}
}
}
显然,这有一些问题,例如它似乎意味着
StreamWriter
没有指定,但其思想是流读取器只通过
IEnumerable
在引擎盖下,应用变换代理,并在不在内存中创建任何新的、可能很大的对象的情况下拉取结果。
我在内存中有一些非常大的可枚举对象,我需要将它们推送到接受流的外部位置(比如Amazon S3)。我真的负担不起用集合构建一个内存流并将其发送出去;我可以在磁盘上执行spool和从磁盘读取,但如果我有选择的话,我宁愿不这样做,因为这似乎是一个额外的步骤。
这可能吗?如果可能的话,是否可行?