我讀了一些關於垃圾收集的信息(它是如何工作等)。我試着理解它是如何工作的,但我認爲我有問題。我知道垃圾收集器運行時:
是不夠內存,
你調用GC.Collect()。
這是我的代碼:垃圾收集器C#,關於'清除'對象的問題
public partial class Form1 : Form
{
public Testing _d;
public Boolean _first = false;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (!_first)
{
_d = new Testing();
int test = _d.DoSomething("example");
}
}
private void button2_Click(object sender, EventArgs e)
{
_first = true;
}
private void button3_Click(object sender, EventArgs e)
{
//if (_first)
//{
// _d = null;
//}
GC.Collect();
}
}
public class Testing
{
private ASCIIEncoding _ascii;
private bool _disposed = false;
public Testing()
{
_ascii = new ASCIIEncoding();
}
public int DoSomething(string message)
{
return _ascii.GetByteCount(message);
}
}
當我點擊按鈕1,我在創建新的對象測試。 _d是對這個新對象的引用。我正在使用JetBrains dotTrace Memory轉儲內存,並看到這個新對象存在。點擊button2後,我將布爾_first設置爲true,以使_d變得無法訪問。在這一點上,我想當我運行GC.Collect()GC將從堆棧'清除'這個對象,但我看到它仍然存在。我誤解了GC的工作?或者我做錯了?
它在我設置時工作_d = null;
你想在這裏解決什麼問題?你有實際的分析數據表明你的應用程序有內存泄漏嗎? – 2011-06-15 15:21:55