En qué circunstancias, debemos llamar a GC. Recoger dos veces

Tenemos una aplicación WPF, basada en Unity con patrón MMVVVM. En el ciclo de vida de la aplicación puede haber varios ciclos de vida del proyecto, después de cada ciclo de vida del proyecto, hacemos un desmontaje manual e intentamos liberar toda la referencia de ViewModels. Para suscripciones a eventos con Unity estamos utilizando referencias débiles. Por lo tanto, suponemos que después del desmontaje, podemos llamar a GC Collect, para que todos los objetos de basura se recojan. Tenemos otra opción para cancelar la suscripción manual de todos los eventos, pero preferimos la recolección de basura porque nos eliminará alrededor de 200 MB, lo que facilitará la carga de nuevos proyectos.

Con una instancia, estamos observando que, si llamo GC.Collect solo una vez, su referencia aún permanece en la memoria por algún tiempo.

GC.Collect();
GC.WaitForPendingFinalizers(); 

Pero si trato de llamar a GC dos veces seguidas, limpia todo muy bien.

GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();

Cualquier pensamiento o puntero será muy apreciado.

Actualizar:

No hay finalizadores definidos en la clase.

Ahora también estoy considerando un caso, en el que este objeto se refiere a otro objeto que podría tener un finalizador. En nuestro marco, tenemos finalizador solo para DBProvider, así que no creo, incluso este es el caso.

Respuestas a la pregunta(4)

Su respuesta a la pregunta