2013-03-04 104 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

相关问题