Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#阵列与流_C#_Arrays_Performance_Stream - Fatal编程技术网

C#阵列与流

C#阵列与流,c#,arrays,performance,stream,C#,Arrays,Performance,Stream,当编写在潜在无限数据流(即字节、字符等)上运行的函数时,在决定使用字符串/数组与流作为输入/输出时,有哪些设计考虑因素 总是编写函数来使用流,然后使用流包装器(即StringReader/Writer)使重载方法返回“简单数据”(如数组或不需要处理的字符串)和其他注意事项,是否会对性能产生巨大影响 我认为在数组上操作的函数要方便得多,因为您可以“返回”结果数组,并且通常不必担心处理。我认为流操作符很好,因为它们可以对无限的数据源进行操作,可能还具有内存效率 如果要处理大小未知的二进制数据,请始终

当编写在潜在无限数据流(即字节、字符等)上运行的函数时,在决定使用字符串/数组与流作为输入/输出时,有哪些设计考虑因素

总是编写函数来使用流,然后使用流包装器(即StringReader/Writer)使重载方法返回“简单数据”(如数组或不需要处理的字符串)和其他注意事项,是否会对性能产生巨大影响


我认为在数组上操作的函数要方便得多,因为您可以“返回”结果数组,并且通常不必担心处理。我认为流操作符很好,因为它们可以对无限的数据源进行操作,可能还具有内存效率

如果要处理大小未知的二进制数据,请始终使用流。例如,如果可以避免的话,将整个文件读入字节数组通常是个坏主意。Net中处理二进制数据(如加密和压缩)的大多数函数都是使用流作为输入/输出的。

如果要编写函数来处理数据流,为什么不将其作为
IEnumerable传递呢。然后,您可以在生成器函数中以
IEnumerable
的形式返回流。换句话说,使用
return yield
一次返回一个结果


在某些情况下,您可以逐步提高性能,因为评估是根据需要进行的。

您使用的任何类型的集合或流类(LinkedList除外)最终归结为核心的字节[]。计算机支持的基本且唯一的集合类型。这当然会是一个痛苦的阻抗失配,最好使用工具箱中的那些,并且已经这样做了。我这样做是为了操作内存中对象集合(即引用类型)的函数,但我不确定我是否喜欢使用这种方法操作基元的想法。例如,如果流被设计为省略某些模式,那么您将不得不实现更多必要的循环,因为您不能一次返回一组值。