ダウンロード速度を測定して表示するアプリを C# で作成しています。62MB のファイルをチャンクでダウンロードする次のコードがあります。これを拡張して、各チャンクに必要な時間を測定し、グラフ化できるようにする予定です。
そうする前に、これが実際に私が思っていることをしていることを確認するために、いくつか質問があります。コードは次のとおりです。
private void DownloadFile()
{
string uri = ConfigurationManager.AppSettings["DownloadFile"].ToString();
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(uri));
int intChunkSize = 1048576; // 1 MB chunks
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
byte[] buffer = new byte[intChunkSize];
int intStatusCode = (int)response.StatusCode;
if (intStatusCode >= 200 && intStatusCode <= 299) // success
{
Stream sourceStream = response.GetResponseStream();
MemoryStream memStream = new MemoryStream();
int intBytesRead;
bool finished = false;
while (!finished)
{
intBytesRead= sourceStream.Read(buffer, 0, intChunkSize);
if (intBytesRead > 0)
{
memStream.Write(buffer, 0, intBytesRead);
// gather timing info here
}
else
{
finished = true;
}
}
}
}
}
質問:
インスタンス化されたときに応答にすべてのデータが含まれていますか、それともヘッダー情報だけですか? response.ContentLength は正しい値を反映しています。
1 MB のチャンク サイズを使用していますが、各反復で読み取られる実際のバイト数 (intBytesRead) ははるかに少なく、通常は 16384 バイト (16 KB) ですが、場合によっては 1024 (1 KB) になります。どうしてこれなの?
実際に 1 MB のチャンクを強制的に読み取る方法はありますか?
ここで実際にデータを MemoryStream に書き込む目的はありますか?
ありがとう。
ダン