我正在编写一个使用 HttpWebRequest 将大文件上传到 Web 服务的应用程序。
此应用程序将由具有不同互联网速度的各种人运行。
我以块的形式异步读取文件,并将这些块异步写入请求流。我使用回调在循环中执行此操作。我一直这样做,直到整个文件被发送。
在写入之间计算上传速度,随后更新 GUI 以显示所述速度。
我面临的问题是决定缓冲区大小。如果我将其设置得太大,连接速度较慢的用户将看不到速度的频繁更新。如果我把它设置得太小,连接速度很快的用户最终会“锤击”读/写方法,导致 CPU 使用率飙升。
我现在正在做的是从 128kb 开始缓冲区,然后每 10 次写入检查这 10 次写入的平均写入速度,如果不到一秒,我将缓冲区大小增加 128kb。如果写入速度低于 5 秒,我也会以类似的方式缩小缓冲区。
这工作得很好,但感觉很随意,似乎还有改进的余地。我的问题是,有没有人处理过类似的情况,你采取了什么行动?
谢谢