使用HttpWebRequest发送大文件,根据需要增加/缩小缓冲区

NoP*_*God 6 c# file-upload http httpwebrequest

我正在编写一个应用程序,使用HttpWebRequest将大文件上传到Web服务.

此应用程序将由具有各种Internet速度的各种人运行.

我以块的形式异步读取文件,并将这些块异步写入请求流.我使用回调在循环中执行此操作.我一直这样做,直到整个文件发送完毕.

在写入之间计算上载速度,随后更新GUI以显示所述速度.

我面临的问题是决定缓冲区大小.如果我将它设置得太大,连接速度较慢的用户将不会看到频繁的速度更新.如果我将它设置得太小,那么具有快速连接的用户将最终"锤击"读/写方法,从而导致CPU使用率飙升.

我现在正在做的是在128kb启动缓冲区,然后每10次写入我检查这10次写入的平均写入速度,如果它低于一秒钟,我将缓冲区大小增加128kb.如果写入速度低于5秒,我也会以类似的方式缩小缓冲区.

这非常有效,但这一切都让人觉得很随意,似乎还有改进的余地.我的问题是,有没有人处理类似的情况,你采取了什么行动?

谢谢

Ank*_*kit 0

我认为这是一个很好的做法。我也用过大文件上传。但其中有一个小调整。我通过调用不同的服务来确定第一个请求中的连接速度。这实际上可以节省每个请求重新计算速度的开销。这样做的主要原因是

  1. 在慢速连接中,速度通常波动很大。因此,每个请求都重新计算它是没有意义的。

  2. 我应该提供恢复功能,用户也可以从上次结束的位置重新上传文件。

考虑到可扩展性,我曾经在第一个请求时修复缓冲区。让我知道是否有帮助