2013-04-05 26 views
5

Theo như tôi hiểu, có ba thế hệ thu gom rác - 0, 1 và 2, cho tất cả các phiên bản .NET.Trong .NET, GCMaxGeneration có bao giờ là không?

Có bất kỳ trường hợp nào khi kiểm tra GC.MaxGeneration sẽ mang lại bất kỳ điều gì khác hơn 2? Có các GC trên các khung công tác khác có số lượng các thế hệ GC khác nhau không?

+4

Tôi chưa thử nghiệm, nhưng Khung Compact cũ sử dụng GC không phải thế hệ, và 'MaxGeneration' được ghi lại để trả về 0 trong trường hợp này, vì vậy có lẽ trong CF? –

Trả lời

8

Cần lưu ý rằng GC.MaxGeneration là liên tục cho cuộc đời của ứng dụng là trong bản thân một chi tiết thực hiện:

Thuyết minh Implementers

Đối với thi này, giá trị trả về bởi các MaxGeneration bất động sản được đảm bảo duy trì liên tục trong thời gian tồn tại của ứng dụng thực thi .

này ngụ ý rằng không chỉ có thể MaxGeneration thể khác với 2 trong việc triển khai khác của .NET framework, nhưng nó cũng có thể khác nhau trong khi thực hiện chương trình (tùy thuộc vào số lượng của các thế hệ được sử dụng bởi các bộ thu rác tại thời gian getter tài sản được gọi).

Triển khai khác cũng có thể sử dụng các bộ thu gom rác khác nhau tùy theo hoàn cảnh. Ví dụ: Mono có thể sử dụng Boehm non-generational GC (MaxGeneration sẽ luôn là 0 rồi) hoặc SGen generational GC (chỉ thực hiện hai thế hệ, vì vậy MaxGeneration sẽ luôn nhỏ hơn hoặc bằng 1 ở đó).

+0

Tôi không hiểu. Nó nói _ .. đảm bảo duy trì liên tục trong suốt vòng đời của một ứng dụng thực thi .._, nhưng bạn nói nó có thể _ .. thay đổi trong quá trình thực hiện chương trình .._. –

+4

@ John, bởi vì nó nói * cho việc triển khai này *. Nói cách khác, hằng số 'MaxGeneration' còn lại chỉ áp dụng cho việc triển khai .NET framework của Microsoft. –

+0

Trong SSCLI, nó được mã hóa cứng để trả về 2, vì vậy tôi nghi ngờ nó sẽ thay đổi trong khi thực thi. – Pete

Các vấn đề liên quan