HttpWebRequestを使用して大きなファイルをWebサービスにアップロードするアプリケーションを作成しています。
このアプリケーションは、さまざまなインターネット速度のさまざまな人々によって実行されます。
ファイルをチャンクで非同期的に読み取り、それらのチャンクをリクエストストリームに非同期で書き込みます。コールバックを使用してループでこれを行います。そして、ファイル全体が送信されるまでこれを続けます。
アップロードの速度は書き込みの間に計算され、その後GUIが更新されて上記の速度が表示されます。
私が直面している問題は、バッファサイズの決定です。大きくしすぎると、接続が遅いユーザーには速度の頻繁な更新が表示されなくなります。小さくしすぎると、接続が速いユーザーは読み取り/書き込みメソッドを「ハンマー」にしてしまい、CPU使用率が急上昇します。
私が今していることは、128kbでバッファを開始し、10回の書き込みごとに、それらの10回の書き込みの平均書き込み速度をチェックし、1秒未満の場合は、バッファサイズを128kb増やします。書き込み速度が5秒を下回った場合も、同様の方法でバッファを縮小します。
これは非常にうまく機能しますが、すべてが非常に恣意的であり、改善の余地があるようです。私の質問は、誰かが同様の状況に対処したことがあり、どのような行動をとったかということです。
ありがとう