Как передать mp3-файл с URL-адреса, не используя много оперативной памяти?

У меня есть способ потоковой передачи mp3 из источников URL. В этом методе файл начинает загружаться, и в то же время загруженные байты сохраняются в MemoryStream. Но я понял, что этот метод не годится. Потому что использование оперативной памяти составляет примерно 50 МБ при воспроизведении файла mp3.

Поэтому я хочу сделать это без сохранения в MemoryStream. Я попытался сохранить загруженные байты во временный файл, но это не сработало. Как исправить это для работы с FileStream?

Хорошо работает с MemoryStream:

MemoryStream ms = new MemoryStream();
int bytesRead = 0;
long pos = 0;
int total = 0;

do
{
   bytesRead = responseStream.Read(buffer, 0, buffer.Length);
   Buffer.BlockCopy(buffer, 0, bigBuffer, total, bytesRead);
   total += bytesRead;
   pos = ms.Position;
   ms = new MemoryStream(bigBuffer);
   ms.Position = pos;
   frame = Mp3Frame.LoadFromStream(ms);

   //Other codes to play mp3...
}
while (bytesRead > 0 || waveOut.PlaybackState == PlaybackState.Playing);

Этот код вызывает исключение в строке LoadFromStream с FileStream

int bytesRead = 0;
long pos = 0;
int total = 0;
string path =Path.Combine( Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),"temp.mp3");
FileStream fs = new FileStream(path, FileMode.Create, FileAccess.ReadWrite);
do
{
   bytesRead = responseStream.Read(buffer, 0, buffer.Length);
   total += bytesRead;
   pos = fs.Position;
   fs.Write(buffer, 0, bytesRead);
   fs.Position = pos;
   frame = Mp3Frame.LoadFromStream(fs);

   //Other codes to play mp3...
}
while (bytesRead > 0 || waveOut.PlaybackState == PlaybackState.Playing);

person Ali Tor    schedule 17.09.2016    source источник
comment
50Mb не кажется особенно чрезмерным. Если вы понимаете, как работает сборщик мусора .NET, вы поймете, что иногда память не освобождается сразу, даже если она не используется. Если у вас не хватает ОЗУ или использование постоянно растет, я бы не беспокоился об этом.   -  person Mark Heath    schedule 20.09.2016
comment
Спасибо за ответ @Марк. Основная проблема здесь заключалась в том, чтобы хранить все данные mp3 в массиве байтов. Я решил эту проблему, используя временный файл и читая единственную необходимую часть потока. В то время я задавал этот вопрос, я не знал, как это сделать. После некоторых сложных исследований я сделал это. Теперь использование оперативной памяти составляет около 10 МБ и стабильно. Я ответил на свой вопрос здесь stackoverflow.com/questions/39556670/   -  person Ali Tor    schedule 20.09.2016