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