Una forma de hacerlo, si no necesita hacerlo en un tiempo programado, pero solo tiene que limpiar "de vez en cuando", es crear una función en su Global.asax Session_OnEnd() que creará un número aleatorio entre 1 y 100, y si el número es, por ejemplo, 50, ejecutará la tarea de mantenimiento.
Offcourse puede reducir el "100" para que la tarea suceda con más frecuencia.
También hay un artículo titulado 'Simular un servicio de Windows utilizando ASP.NET para ejecutar trabajos programados' en http://www.codeproject.com/aspnet/ASPNETService.asp que utiliza un caché que expira para simular un temporizador. Afirma que se puede ejecutar en cualquier sitio alojado.
Si está utilizando la última, por favor lea este comentario de un post acerca de esta técnica:
Tienes que ser muy cuidadoso en la longitud de la tarea en ejecución. Cada tarea nueva es un nuevo Worker Thread y hay un número limitado de ellos - como "toma prestados" un hilo del grupo de threads administrado .
A partir de la versión 3.5 del Marco de la número máximo de hilos era aumentó 10 veces de 25 a 250. Pero ahora hay un inicio logarítmica a ellos, así como que reparte más hilos que obtiene más tacaños con ellos. Si ejecuta sin hilos disponibles en el grupo de subprocesos administrados , su respuesta veces irá a través del techo .
Lo que realmente está escribiendo aquí es un sistema de mensajes/colas .
Si estás haciendo cosas como actualizar el caché, entonces por supuesto - patear de una nueva tarea. Si estás haciendo algo así como la descarga de un recurso HTTP secundario o algún tipo de base de datos trabajo intensivo - escribir un servicio de Windows y utilizar una cola que le permite más control sobre la cantidad que “mordedura” apaga cada vez.
Esta pregunta está fuera del tema de Stack Overflow, ya que está buscando mejores prácticas, lo que atrae respuestas obstinadas. – cybermonkey