Tengo esta idea al pensar en formas de reciclar objetos. Estoy haciendo esto como un experimento para ver cómo funciona la agrupación de memoria y me doy cuenta de que en el 99% de los escenarios esto es muy innecesario.Mantener el objeto en intento de destrucción de GC
Sin embargo, tengo una pregunta. ¿Hay alguna manera de obligar al GC a mantener el objeto? En otras palabras, ¿puedo decirle al GC que no destruya un objeto y diga en su lugar que se haya creado una nueva referencia en una lista que esté disponible para usar objetos? La cuestión, aunque no he probado esto, es que si añado algo como esto a una lista:
~myObject()
{
((List<myObject>)HttpContext.Current.Items[typeof(T).ToString()]).add(this);//Lets assume this is ASP
}
se añadirá un puntero a este objeto en la lista, pero si el objeto es destruido obtendré una excepción de puntero nulo porque el objeto ya no está allí. Sin embargo, ¿podría decirle al CG que no recoja este objeto y así conserve el objeto?
Sé que este es el tipo de cosas que la mayoría de los programadores irían "¿por qué diablos harías esto?". Pero, por otro lado, la programación se trata de probar cosas nuevas y aprender cosas nuevas. ¿Alguna sugerencia, pensamiento, implementación? ¡Cualquier ayuda sería muy apreciada!
SuprimirFinalizar simplemente cancela la ejecución del destructor, no de la colección. KeepAlive es mejor, pero debes llamarlo a otro lugar, no es práctico. –