我試着去了解,爲什麼會有不同的行爲。Finilize and GC.Collect
代碼1不同代碼2只是註釋行Console.WriteLine(h.ToString());
。
但是,在這種情況下Console.Beep();
在代碼1執行以前static void Main(string[] args)
完成。
代碼2Console.Beep();
只有當static void Main(string[] args)
完成(進程終止?)時才執行。
請問您能解釋一下,爲什麼會這樣?
我試圖用[+/-]優化設置調用代碼 - 看起來不依賴它。
現在我沒有WinDbg, - mb在反編譯代碼中的答案。
代碼1:
class Program
{
static void Main(string[] args) {
var h = new Haha();
// Console.WriteLine(h.ToString());
GC.Collect();
GC.WaitForPendingFinalizers();
/* Console.Beep() calls here */
Console.ReadKey();
}
}
public class Haha
{
~Haha() {
Console.Beep();
}
}
代碼2:
class Program
{
static void Main(string[] args) {
var h = new Haha();
Console.WriteLine(h.ToString());
GC.Collect();
GC.WaitForPendingFinalizers();
Console.ReadKey();
/* Console.Beep() calls here */
}
}
public class Haha
{
~Haha() {
Console.Beep();
}
}
您是否在調試器下運行代碼? – 2015-03-13 10:55:46