在.NET中释放资源MemoryStream

时间:2015-06-24 17:48:51

标签: c# .net

这是一个类似代码的简单代码,我在项目中使用:

MemoryStream outputStream = new MemoryStream();
using (Mp3FileReader reader = new Mp3FileReader(@"C:\Users\practice\Desktop\111.mp3"))
{
    Console.WriteLine("Reader");
    Console.ReadLine();
    using (WaveStream waveStream = WaveFormatConversionStream.CreatePcmStream(reader))
    {
        Console.WriteLine("waveStream");
        Console.ReadLine();
        using (WaveFileWriter waveFileWriter = new WaveFileWriter(outputStream, waveStream.WaveFormat))
        {
            byte[] bytes = new byte[waveStream.Length];
            waveStream.Position = 0;
            waveStream.Read(bytes, 0, (int)waveStream.Length);
            waveFileWriter.Write(bytes, 0, bytes.Length);
            waveFileWriter.Flush();
            outputStream.Position = 0;
            Console.WriteLine("MAIN STREAM");
            Console.ReadLine();
        }
    }
}                

outputStream.Dispose();
Console.WriteLine("MAIN STREAM DISPOSE");
Console.ReadLine();

如您所见,我将一些字节写入outputStream。问题:在Dispose()之后我可以在Task Manager中看到资源不是免费的。如何清理outputStream的堆内存?我只试过using,但我得到的结果相同。

1 个答案:

答案 0 :(得分:0)

首先,您应该在MemoryStream语句中使用using(或任何IDisposable对象),这是try / finally块的语法糖。

using(MemoryStream outputStream = new MemoryStream())
using (Mp3FileReader reader = new Mp3FileReader(@"C:\Users\practice\Desktop\111.mp3"))
{
    // code
}

其次,在MemoryStream中调用Dispose会关闭流,并释放句柄。这并不意味着内存将立即释放。这是垃圾收集的工作。