modifier Major, si les commentaires peuvent sembler hors de propos. Désolé pour le dérangement.
Il est difficile de dire avec certitude.
En supposant que le code ressemble à ceci
public class SomeType {
private static readonly object Lock = new object();
public void Foo() {
lock (Lock) {
Console.WriteLine("in foo");
GC.Collect(2);
GC.WaitForPendingFinalizers();
GC.Collect(2);
}
}
~SomeType() {
lock (Lock) {
Console.WriteLine("in finalizer");
}
}
}
Vous pourriez obtenir une impasse si vous avez eu plus de cas SomeType
comme ils partagent tous un objet statique pour le verrouillage. Vous devez disposer d'au moins une instance non bloquée et non collectée de SomeType
et appeler le Foo
sur une autre instance. Maintenant, si vous n'avez pas le finaliseur comme ci-dessus, je ne vois pas comment le code pourrait se bloquer.
Pourquoi le feriez-vous? Peu importe, n'appelez pas GC.Collect() ... 99/100 vous le faites pour la mauvaise raison –
Merci, mais comme je l'ai dit mettre de côté les opinions des gens ou des vérités sur l'appel explicite GC.Collect .... –
Que le verrouillage le code est également particulièrement inutile. Quel effet essayez-vous même d'atteindre ici? (Inutile parce que deux appelants à ce code se verrouilleront sur deux objets différents) –