2010-02-23 16 views
6

Tengo un objeto que tiene un costo de inicialización relativamente alto que proporciona un método de cálculo seguro de subprocesos necesario para procesar solicitudes de servicio web.Ejemplo de objeto compartido entre invocaciones de servicio web

Estoy buscando la mejor manera de mantener una instancia inicializada disponible entre las solicitudes.

Un método es declararlo como una variable estática. Luego permanecería disponible hasta que se reciclara el AppDomain.

Este es un servicio web anterior que no utiliza WCF, pero la conversión es una opción si eso proporciona una mejor solución.

¿Hay un mejor enfoque?

Respuesta

2

¿Qué hay sobre el almacenamiento en caché del objeto en HttpRuntime.Cache?

MyObject val = (MyObject)HttpRuntime.Cache["MyCacheKey"]; 
if (val == null) 
{ 
    val = // create your expensive object here 
    HttpRuntime.Cache.Insert("MyCacheKey", val, null, 
     DateTime.Now.AddSeconds(3600), 
     System.Web.Caching.Cache.NoSlidingExpiration); 
} 

Aquí lo dejo en el caché durante hasta una hora, pero puede variar esto según sea necesario.

+0

¿El ciclo de vida de la memoria caché es independiente del ciclo de vida de cada dominio de aplicación (AppDomain procesa las solicitudes HTTP)? –

+0

@Eric J. Es independiente de una solicitud HTTP individual. En otras palabras, su servicio podría manejar miles de solicitudes y el objeto permanecería en la memoria caché. Si el App Domain se recicla (diariamente o lo que sea que hayas configurado en IIS), entonces el objeto en caché se elimina. Del mismo modo, no se garantiza que el objeto permanezca en la memoria caché por su caducidad, esto depende de la memoria disponible, etc. – Keltex

+0

Esto proporciona esencialmente el mismo ciclo de vida que una referencia de objeto estático, pero con la flexibilidad añadida de que puedo controlar la caducidad como IIS si necesita reclamar algo de memoria? –

Cuestiones relacionadas