【发布时间】:2018-08-02 18:20:25
【问题描述】:
有没有办法获取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)。我真的负担不起用集合构建 MemoryStream 并发送它;我可以假脱机到磁盘并从磁盘读取,但如果可以选择,我不希望这样做,因为这似乎是一个额外的步骤。
这可能吗?如果可以的话,实用吗?
【问题讨论】:
标签: c# stream ienumerable