Dev*_*vin 3 c# memory-leaks memory-management using .net-4.0
在分析我的程序时,我注意到很多字节[]卡在内存中.我做了一些挖掘,发现大多数实例都是以某种方式创建的:
public byte[] CreateBytes(byte[] bytes)
{
using (var start = new MemoryStream())
{
using (var memStr = new MemoryStream(bytes))
{
//do stuff
return start.ToArray();
}
}
}
Run Code Online (Sandbox Code Playgroud)
返回的byte []然后传递给其他方法,并用于MemoryStream从另一个使用块中创建另一个方法:
using (var uncompressedStream = new MemoryStream(uncompressedData))
{
using (var compressedStream = new MemoryStream())
{
//Do some compression
}
}
myObject.Bytes = uncompressedData;
uncompressedData = null;
return myObject;
Run Code Online (Sandbox Code Playgroud)
(uncompressedData是从CreateBytes()返回的值).
我的问题是,byte []什么时候被清除? 我是否特别需要将其设置为null,如果是,那么在哪里?在第二个使用块后我不再需要它,但如果我只是说uncompressedData = null;我不确定是否会回收内存.
我会认为use语句CreateBytes(byte[] bytes)会处理掉字节,但是因为它返回了一个引用会推迟和/或放弃处理吗?
编辑:我添加了另一行代码.因为我将uncompressedBtyes存储在另一个对象中,所以将uncompressedData设置为null是没有意义的,并且byte []只要myObject(或者直到myObject.Bytes设置为null)就会生存,对吗?