Tenemos una aplicación WPF, basada en Unity con el 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 Desgarre manual e intentamos liberar toda la referencia de ViewModels. Para suscripciones de eventos con Unity estamos utilizando referencias débiles. Así que estamos asumiendo que, después del derribo, podemos llamar a GC Collect, para que todos los objetos de basura sean recolectados. Tenemos otra opción para anular la suscripción manual de todos los eventos, pero preferimos la recolección de basura, ya que borrará alrededor de 200MB para nosotros, lo que facilitará la carga de nuevos proyectos.Bajo qué circunstancias, necesitamos llamar a GC.Colgar dos veces
Con una instancia, estamos observando que, si llamo a GC.Collect solo una vez, su referencia permanece en la memoria por algún tiempo.
GC.Collect();
GC.WaitForPendingFinalizers();
Pero si intento llamar a GC dos veces seguidas, lo limpia todo muy bien.
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
Cualquier idea o sugerencia será muy apreciada.
Actualización:
No hay finalizadores definidos en la clase.
Ahora también estoy considerando un caso, en el que este objeto se refiere en otro objeto que podría tener un finalizador. En Nuestro marco, tenemos el finalizador solo para DBProvider, así que no creo, incluso este es el caso.
¿Qué es MMVVVM? ¿La forma romana de codificación? – DanDan
MVVM es común en WPF, pero en nuestro caso, tenemos varias aplicaciones diferentes en diferentes tecnologías .NET y todas están basadas en el framework DomainObject común. Así que decidimos una nueva capa MV sobre nuestros DomainObjects para facilitar nuestras aplicaciones WPF. –
MMVVVM = 2985, creo. –