2012-02-24 18 views
5

Estoy construyendo un WCF-Service que está alojado en un servicio de ventanas . El Servicio WCF es llamado por una aplicación ASP.Net utilizando un proxy.Vida útil de un Singleton

using (WcfServiceRef.MonitorClient proxy = new WcfServiceRef.MonitorClient()) 
{ 
    //WCF Service proxy 
    proxy.Open(); 
    proxy.DoSomething(); 
} 

Además tengo una clase Singleton DataAdapter que se utiliza en el WCF-servicio como este (la mayoría de las veces es simplemente reenvía la llamada al adaptador de datos, para poder cambiar la aplicación de la real los datos de acceso fácil):

DataAdapter.GetInstance().DoSomething(); 

Mi adaptador de datos se parece a esto y sostiene myData que debe mantenerse con vida:

public static DataAdapter DataAdapterInstance; 
    private List<CustomObjects> myData; 

    internal static ServiceAdapter GetInstance() 
    { 
     if (DataAdapterInstance == null) 
     { 
      DataAdapterInstance = new DataAdapter(); 
     } 
     return DataAdapterInstance; 
    } 

Ahora aquí viene lo im haveing ​​problemas con: (no estoy seguro si todo im escrito aquí es correcta)

  • El servicio de Windows' corre teóricamente siempre (como debería) El WCF servicio
  • sólo se ejecuta cuando se llama/creado por mi representante (de asp.net)

Cuando hace mi adaptador de datos (que contiene todos los datos de mi) "muere" ... así que lo que estoy pidiendo aquí es ¿cuál es el tiempo de vida de una objeto cuando en realidad no hay referencia en él. (Yo diría que es recogido cada vez que el colector de basura se ejecuta) - Creo que mi enfoque no está demasiado bien, le agradecería cualquier sugerencia sobre cómo almacenar mis datos (preferidos sin necesidad de utilizar una base de datos o un archivo externo)

Gracias por investigando mi problema!

Respuesta

7

referencias estáticas son referencias "raíz" para GC, por lo que "nunca" van a morir (hasta el dominio de aplicación se descarga)

+0

gracias! "never" suena bien: P , pero ¿qué significa "descargar appDomain"? ¿Es esto en mi escenario cuando se detiene el servicio de alojamiento de Windows? – r3try

+2

La aplicación en .NET "consiste" de AppDomains. Por lo general, es solo un AppDomain a menos que crees más explícitamente. Cualquier código [administrado] se ejecuta en AppDomain. Si no hace nada con AppDomains, entonces solo tiene uno y se descargará una vez que se detenga su aplicación. En este escenario, todas las variables estáticas están "vivas" hasta el final. –

+0

ty para la buena explicación! – r3try

1

Dado que su DataAdapterInstance es estático, no se recogerá hasta que el AppDomain en el que se carga se descargue, lo que en la mayoría de los casos significa que solo se recogerá una vez que se cierre la aplicación.

Cuestiones relacionadas