2013-04-05 14 views
5

Per quanto ho capito, ci sono tre generazioni di garbage collection - 0, 1 e 2, per tutte le versioni di .NET.In .NET, GC.MaxGeneration Ever Not 2?

Esistono circostanze in cui l'esame di GC.MaxGeneration produce un valore diverso da 2? Esistono GC su altri framework che hanno un diverso numero di generazioni di GC?

+4

Non l'ho provato, ma il vecchio Compact Framework usava un GC non generazionale e 'MaxGeneration' è documentato per restituire 0 in questo caso, quindi forse in CF? –

risposta

8

Si deve rilevare che GC.MaxGeneration essere costante per tutta la vita dell'applicazione è di per sé un dettaglio di implementazione:

Note per gli implementatori

Per questa implementazione, il valore restituito dalla proprietà MaxGeneration è garantito di rimanere costante per tutta la durata di un'applicazione di esecuzione .

Questo implica che non solo può essere diverso da MaxGeneration2 in altre implementazioni del quadro NET, ma può anche variare durante l'esecuzione del programma (a seconda del numero di generazioni utilizzati dal garbage collector al tempo viene chiamato il getter della proprietà).

Altre implementazioni possono anche utilizzare diversi garbage collector a seconda delle circostanze. Ad esempio, Mono può utilizzare lo Boehm non-generational GC (MaxGeneration sarà sempre 0) o lo SGen generational GC (che implementa solo due generazioni, quindi MaxGeneration sarà sempre inferiore o uguale a 1).

+0

Non capisco. Dice _ .. garantito di rimanere costante per tutta la vita di un'applicazione in esecuzione .._, ma tu dici che potrebbe variare durante l'esecuzione del programma .._. –

+4

@John, perché dice * per questa implementazione *. In altre parole, la costante restante di 'MaxGeneration' si applica solo all'implementazione di Microsoft del framework .NET. –

+0

In SSCLI, è hardcoded per restituire 2, quindi dubito che cambierà durante l'esecuzione. – Pete