我知道,我應該使用WeakReference的只是大的物體,但我很好奇以下情形:WeakReference的包裝字符串引起奇怪的行爲
object obj = 1; //Int32
var wk = new WeakReference(obj);
Console.WriteLine(wk.IsAlive); //Prints: True
obj = null;
GC.Collect(2, GCCollectionMode.Forced, true);
Console.WriteLine(wk.IsAlive); //Prints: false, All Rigth!
到目前爲止,這是正常的。
看看這個:
object obj = "test"; //String
var wk = new WeakReference(obj);
Console.WriteLine(wk.IsAlive); //Prints: True
obj = null;
GC.Collect(2, GCCollectionMode.Forced, true);
Console.WriteLine(wk.IsAlive); //Prints: True, Why?
這是怎麼回事?
真棒,邁克z!很多! –
我在我的程序集信息中應用了以下屬性: CompilationRelaxationsAttribute(CompilationRelaxations.NoStringInterning)] 我的代碼繼續返回相同的結果。 這應該不會影響我們的結果嗎? –
@ViniciusGonçalves我不熟悉該屬性,但[其他](http://stackoverflow.com/questions/15778165/compilationrelaxations-attribute-not-working)[問題](http://stackoverflow.com/questions/ 15601916/how-does-compilationrelaxations-nostringinterning-actually-work)暗示它不是保證,只是一個提示。 –