私はある場所に立ち往生しています。私はURLからflvファイルを読んでいます。これをストリームに読み込み、このストリームをループ内のMemoryStreamに書き込んでいます。コードがループから抜けると、私はMemoryStream全体をByteArrayに書き込み、次にこのByteArrayを私のハードディスク上のローカルファイルに書き込みます。複数のスレッドでMemoryStreamにストリームを読み取る
このflvは大きすぎるため、ループ処理に多くの時間がかかります。私は複数のスレッドでMemoryStreamのオリジナルの大きなストリームを読むことを考えています。これは、ストリームを例えば10分割し、これらの部分を複数のスレッドでMemoryStreamに書き込むことを意味します。これはどうすればいいですか?
私は自分のコードを添付しています。
//Get a data stream from the url
WebRequest req = WebRequest.Create(url);
WebResponse response = req.GetResponse();
using (Stream stream = response.GetResponseStream())
{
//Download in chuncks
byte[] buffer = new byte[1024];
//Get Total Size
int dataLength = (int)response.ContentLength;
//Download to memory
//Note: adjust the streams here to download directly to the hard drive
using (MemoryStream memStream = new MemoryStream())
{
while (true)
{
//Try to read the data
int bytesRead = stream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
Application.DoEvents();
break;
}
else
{
//Write the downloaded data
memStream.Write(buffer, 0, bytesRead);
}
}
//Convert the downloaded stream to a byte array
byte[] downloadedData = memStream.ToArray();
}
}
すべてのヘルプは、あなたが複数のスレッドを使用して、ダウンロードを高速化することができません おかげ
なぜ複数のスレッドがあなたを助けてくれると思いますか? –
大きなストリームをスレッド内のmemorystreamに読み込めたら、処理を高速化できます。 –
この場合のボトルネックは、ネットワークを介して到着するのにかかる時間であり、それを読み取ってメモリ内で移動するのにかかる時間ではありません。 –