Bir yere sıkışmış durumdayım. Bir URL'den bir flv dosyası okuyorum. Bunu bir Akışa okuyorum ve ardından bu Akışı bir döngüde MemoryStream'e yazdım. Kod döngüden çıktığında, tüm MemoryStream'i bir ByteArray'a yazıp bu ByteArray'ı sabit diskimde yerel bir dosyaya yazıyorum.Birden çok iş parçacığında bir MemoryStream akışını okuma
Bu flv çok büyük olduğu için, döngüde işlemek çok zaman alır. Birden fazla iş parçacığında MemoryStream'deki orijinal büyük akışı okumaya çalışıyorum. Bu, Akımı 10 parçaya bölerek ve bu parçaları çoklu threadlarda MemoryStream'e yazmak anlamına gelir. Bunu nasıl yaparım?
Kod parçamı ekliyorum.
//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();
}
}
Herhangi bir yardım Teşekkür
Neden birden fazla iş parçacığının burada size yardımcı olacağını düşünüyorsunuz? –
Bu büyük akışı threadlarda memorystream'e okuyabiliyorsam, işlemi gerçekten hızlandırabilirim. –
Buradaki darboğaz, ağ üzerinden ulaşması gereken süreyi ve onu okumak ve hafızaya taşımak için gereken süreyi değil. –