mi sono imbattuto in una domanda intervista, che non sapevo la risposta (piccolo aiuto :)) bene dichiarato qualcosa del genere:Finalizer bloccato in loop infinito
Class SomeClass : IDisposable
{
public void Dispose()
{
while(true)
{
}
}
~SomeClass()
{
Dispose();
}
}
1) Ha l'oggetto ottenere finalizzato quando non si fa più riferimento dopo il prossimo GC? La mia risposta è stata NO, perché il thread di finalizzazione sarà bloccato sul loop infinito.
2) Che cosa potrebbe essere fatto nel Dispose per terminare la messa a punto e quante volte sarà il ciclo continuerà prima che l'oggetto è disposto (con fuori tenendo in considerazione il tempo che trascorrerà nella prossima Gen)
io non sono particolarmente chiara della domanda esatta (2) .I po 'a corto di tempo ...
non conoscendo la risposta ho messo un contatore statico che arriva a 3 e chiamate rompono e ha dichiarato 3 che tecnicamente sarebbe lavoro :), ma questa non è la risposta
Sto indovinando come qualcosa a che fare con GC .SupressFinalize()? forse chiamando GC.SupressFinalize() prima di entrare nel ciclo?
eventuali idee se non sulla risposta alla domanda poco chiara, più su ciò che potrebbero essere di mira?
con qualsiasi mezzo questa è una questione intervista curiosa - mentre conoscenza approfondita riguardo al GC è un'area valida da attingere in generale, non so quale risposta a questa particolare domanda mostrerà all'intervistatore (oltre al fatto che sai che esiste un thread singolo che esegue le chiamate di finalizzazione) – BrokenGlass