我正在编写一个使用HttpWebRequest将大文件上传到Web服务的应用程序。
此应用程序将由具有各种网速的各种人运行。
我以块的形式异步读取文件,并将这些块异步写入请求流。我使用回调在循环中执行此操作。我一直这样做,直到整个文件发送完毕。
在写入之间计算上载速度,随后更新GUI以显示所述速度。
我面临的问题是决定缓冲区大小。如果我使它太大,连接速度慢的用户将不会看到频繁的速度更新。如果我将它设置得太小,那么具有快速连接的用户将最终“锤击”读/写方法,从而导致CPU使用率飙升。
我现在正在做的是在128kb启动缓冲区,然后每10次写入我检查这10次写入的平均写入速度,如果它低于一秒钟,我将缓冲区大小增加128kb。如果写入速度低于5秒,我也会以类似的方式缩小缓冲区。
这很有效,但它感觉非常武断,似乎还有改进的余地。我的问题是,有没有人处理过类似的情况,你采取了什么行动?
由于
答案 0 :(得分:0)
我认为这是一个很好的方法。我也用于大文件上传。但那里有一个小小的调整。我通过拨打我的不同服务来确定第一个请求中的连接速度。这实际上可以节省每次请求重新计算速度的开销。这样做的主要原因是
在慢速连接中,速度通常会波动很大。因此,每次请求重新计算它都没有意义。
我本来应该提供简历设施,用户可以从上次结束的位置重新上传文件。
考虑到可伸缩性,我曾经使用第一个请求修复缓冲区。如果有帮助,请告诉我