【问题标题】:why stream a file versus sending it at once?为什么要流式传输文件而不是一次发送?
【发布时间】:2009-12-29 18:29:00
【问题描述】:

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

streamReader.ReadToEnd()

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

而其他人则这样做:

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

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

【问题讨论】:

    标签: c# file ftp streaming


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        如果您有大文件,最好不要用大文件占用内存,而是将其分解成碎片。

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 2011-09-21
            • 1970-01-01
            • 2011-10-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多