繁体   English   中英

在.NET中释放资源MemoryStream

[英]Release resources MemoryStream in .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但是得到了相同的结果。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM