在分析我的程序时,我注意到很多 byte[] 卡在内存中。我做了一些挖掘,发现大多数以某种方式创建的实例如下:
public byte[] CreateBytes(byte[] bytes)
{
using (var start = new MemoryStream())
{
using (var memStr = new MemoryStream(bytes))
{
//do stuff
return start.ToArray();
}
}
}
然后将返回的 byte[] 传递给其他方法,并用于MemoryStream
从另一个 using 块中创建另一个:
using (var uncompressedStream = new MemoryStream(uncompressedData))
{
using (var compressedStream = new MemoryStream())
{
//Do some compression
}
}
myObject.Bytes = uncompressedData;
uncompressedData = null;
return myObject;
(uncompressedData
是从 CreateBytes() 返回的值)。
我的问题是,什么时候 byte[] 得到清理? 我是否特别需要将其设置为 null,如果需要,在哪里?在第二个 using 块之后,我不再需要它,但如果我简单地说uncompressedData = null;
,我不确定这是否会回收内存。
我原以为 using 语句CreateBytes(byte[] bytes)
会处理字节,但由于它返回引用,是否会推迟和/或放弃处理?
编辑:我添加了另一行代码。由于我将 uncompressedBtyes 存储在另一个对象中,将 uncompressedData 设置为 null 是没有意义的,并且 byte[] 将一直存在myObject
(或直到myObject.Bytes
设置为 null),对吗?