编写可能无限的"流"数据,即字节,字符,等等,在决定使用字符串/数组与流输入/输出时有哪些设计考虑因素?
总是编写函数来使用流,然后制作使用流包装器(即StringReader / Writer)的重载方法返回"简单数据"是否会产生巨大的性能影响?像数组或字符串,不需要处置和其他考虑因素?
我认为在数组上运行的函数更方便,因为你可以"返回"结果阵列,你通常不必担心处置。我假设流操作符很好,因为它们可以在无限的数据源上运行,也可能是内存效率高的。
答案 0 :(得分:1)
如果您正在处理未知大小的二进制数据,请始终使用流。例如,如果可以避免将整个文件读入字节数组通常是个坏主意。 .Net中使用加密和压缩等二进制数据的大多数函数都是为了使用流作为输入/输出而构建的。
答案 1 :(得分:1)
如果您正在编写处理数据流的函数,那么为什么不将其作为IEnumerable<T>
传递。然后,您可以在生成器函数中将流作为IEnumerable<T>
返回。换句话说,使用return yield
将每个结果返回一个ta时间。
在某些情况下,您可以最终获得性能的渐近改进,因为评估是在需要时完成的。