[英]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.