2013-03-04 156 views
1

我有Jeffrey Richter書中的示例代碼,如下所示。GC.GetGeneration方法給出了意想不到的結果

Object o = new Object(); 

Console.WriteLine("Gen " + GC.GetGeneration(o)); // 0. 
GC.Collect(); 
Console.WriteLine("Gen " + GC.GetGeneration(o)); // 1. 
GC.Collect(); 
Console.WriteLine("Gen " + GC.GetGeneration(o)); // 2 (expected) but it is 0 
GC.Collect(); 
Console.WriteLine("Gen " + GC.GetGeneration(o)); // 2 (expected) but it is 1 

任何人都可以解釋爲什麼第三次和第四次調用GetGeneration顯示0代和1代而不是2代?

+1

我在控制檯應用程序中試過你的代碼,並能看到預期的結果。你有沒有做任何其他的程序/應用程序來獲得這些結果? – ryadavilli 2013-03-04 11:21:01

+0

不是。這是完整的代碼。 class Program static void Main(string [] args) Object o = new Object(); Console.WriteLine(「Gen」+ GC.GetGeneration(o)); // 0. GC.Collect(); Console.WriteLine(「Gen」+ GC.GetGeneration(o)); // 1. GC.Collect(); Console.WriteLine(「Gen」+ GC.GetGeneration(o)); // 2(預計) GC.Collect(); Console.WriteLine(「Gen」+ GC.GetGeneration(o)); // 2(預計) } } – 2013-03-04 11:24:12

+0

@IgorLozovsky - 只需更新問題,而不是嘗試在評論中發佈代碼。 – 2013-03-04 15:28:02

回答

0

我找到了答案。目前我的控制檯應用程序的.Net框架是3.5。當我將其更改爲4個客戶檔案時,我取得了預期的結果。但我還有一個問題 - 在.net 3.5和4.0/4.5中的垃圾收集有什麼區別?

+0

如果您還有其他問題,請點擊「Ask Question」按鈕或嘗試將其集成到您的問題中,而不是回答。 – 2013-03-04 11:34:13

+0

你的第二個問題需要......一個問題(這是一個答案)。 – 2013-03-04 11:35:08

相關問題