我有一個程序在其中分配了一個int數組,並且希望在調用GC.Collect()
之後檢查它是否會被垃圾回收。在這個程序中,我分配一個int數組array1
並保留一個WeakReference
以檢查它是否在稍後被垃圾回收。我有一個名爲procedure
的方法,它在其中分配一個新的本地數組(array2
)並將array2
分配給通過引用傳遞的輸入temp
數組。此方法還分配弱引用ref1
和ref2
以保存有關輸入temp
數組和array2
的信息。當我調用此方法時,我將array1
傳遞給它,因此array1
等於array2
。一旦我退出該方法,我會致電GC.Collect()
強制進行垃圾回收。調試器告知ref1
和ref2
仍然有IsAlive
屬性等於true
。 ref3
,它在main
功能和參考array1
實例化,告訴IsAlive
屬性是垃圾回收後false
,因此array1
已被垃圾收集。2對同一對象的弱引用顯示不同的信息
不應該ref1
,它引用array1
,有IsAlive
屬性等於false
,就像ref3
(其中還引用array1
)呢?
static WeakReference ref1;
static WeakReference ref2;
static WeakReference ref3;
const int max_size = 10;
public static void procedure(ref int []temp)
{
int[] array2 = new int[max_size];
temp = array2;
for (int i = 0; i < max_size; i++)
array2[i] = i * 2;
ref1 = new WeakReference(temp);
ref2 = new WeakReference(array2);
}
static void Main(string[] args)
{
int []array1 = new int[max_size];
ref3 = new WeakReference(array1);
procedure(ref array1);
//array1 = null;
GC.Collect();
}
ref1引用array2。 – krisdyson 2014-09-24 07:09:18