为什么流式传输文件并立即发送?

时间:2009-12-29 18:29:00

标签: c# file ftp streaming

在c#中查看ftp文件的各种方法。 我注意到一些例子:

streamReader.ReadToEnd()

然后转换为字节,然后一次发送文件。

而其他人则做:

while (contentLength != 0)
    stream.write(buff, 0, contentLength);
    contentLength = fileStream.Read(buff, 0, buffLength);

一次发送文件2048用于较大的文件,而另一种方法适用于10-50K范围内的文件吗?

4 个答案:

答案 0 :(得分:1)

这实际上取决于您正在设计的系统正在处理的文件大小。如果您有非常大的文件,则整个文件必须保存在缓冲区中,如果您在流式传输时没有将文件“分块”为各个部分,服务器内存将很快用完。

答案 1 :(得分:1)

如果您只能一次读取或写入文件,则必须分配整个文件所需的空间。这可能很麻烦,尤其是当您不知道文件预先有多大时。对于速度较慢的连接也是不好的,因为在整个过程结束之前你将无法使用任何文件,这对于流媒体电影或音频等应用来说显然很糟糕。缓冲是处理这种情况的一个很好的一般策略。

答案 2 :(得分:0)

如果你有大文件,最好不要用大获取来压缩内存,而是将其分解成碎片。

答案 3 :(得分:0)

使用较小的2K缓冲区的第二个代码在内存方面几乎总是更好,并且就时间而言可能是一个非常微不足道的差异:

http://en.wikipedia.org/wiki/Space-time_tradeoff

此外,您的代码使用while循环,其中两行缩进,但第二行实际上不是循环的一部分,因为它没有括在大括号中。