我c#中的一般物體在GC希望這樣做時被破壞,沒有辦法強制它去做。雖然這很懶,我不會讓你的記憶力耗盡。所以你期望被銷燬的物品還沒有準備好被收集。如果沒有準備好,我的意思是在你的應用程序中你有一個對這個對象的引用。其中有些引用是顯而易見的,如類,居住在整個過程中的一個字段,其他都很難點考慮:
class LongLivingClass // say main window or some other
// instance that lives considerably longer then the other
{
public event Action SomeEvent;
}
class ShortLivingClass // class that is created and should be destroyed
// many times throughout life of LongLivingClass
{
ShortLivingClass(LongLivingClass llc)
{
llc.SomeEvent += DoSomething;
}
void DoSomething(){/*.../*}
}
如果ShortLivingClass
重視通過LongLivingClass
那麼就不會被銷燬,除非你刪除此曝光事件處理程序在dispose方法:
void Dispose()
{
llc.SomeEvent -= DoSomething;
}
注意IDisposable
接口是不一樣的析構函數運行時執行的圖案的一部分。你需要確定地點和時間來調用它。
也要注意閉包,它將捕獲你的變量,如果這些變量是實例字段,那麼實例也將被捕獲。
從長遠來看,您需要在網上搜索c#中的內存泄漏。因此,考慮到這個好運氣,有很多問題。
我有同樣的問題,任何解決方案? – ericosg