6

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

此应用程序将由具有不同互联网速度的各种人运行。

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

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

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

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

这工作得很好,但感觉很随意,似乎还有改进的余地。我的问题是,有没有人处理过类似的情况,你采取了什么行动?

谢谢

4

1 回答 1

0

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

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

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

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

于 2012-06-03T05:34:24.787 回答