El entrevistador me preguntó acerca de esto hoy ... ¿hay alguna respuesta?Cómo forzar al recolector de basura a ejecutarse?
Respuesta
System.GC.Collect()
fuerzas recolector de basura para funcionar. Esto no es recomendable, pero se puede usar si surgen situaciones.
+1 para "si surgen situaciones". –
¿Por qué no se recomienda? –
GC.Collect()
de MDSN,
Utilice este método para tratar de recuperar todo memoria que es inaccesible.
Todos los objetos, independientemente de cuánto tiempo hayan estado en la memoria , son considerados para recolección; sin embargo, los objetos que se mencionan en el código administrado no se recopilan. Utilice este método para forzar al sistema a intentar recuperar la cantidad máxima de memoria disponible .
Tenga en cuenta, sin embargo, que el recolector de basura no siempre puede limpiar lo que esperas ...
¿Qué quieres decir con eso? ¿Qué podría limpiar inesperadamente? – Voldemort
@Voldemort - No limpiaría inesperadamente nada, pero puede no limpiar todo lo que esperas. –
No se recomienda llamar gc explícitamente, pero si se llama
GC.Collect();
GC.WaitForPendingFinalizers();
se llamará GC de forma explícita en todo el código, no se olvide de llamar GC.WaitForPendingFinalizers();
después GC.Collect()
.
'WaitForPendingFinalizers' no proporciona necesariamente un" mejor rendimiento ": simplemente bloquea hasta que se hayan finalizado todos los objetos en la cola de finalización (objetos que podrían haber sido colocados allí por su llamada anterior a' Collect'). Si desea una oportunidad para esos objetos que se deben recopilar, entonces necesita * otra * llamada a 'Recoger' * después de * llamar a' WaitForPendingFinalizers '. – LukeH
Dado que una de las pocas buenas razones para llamar a gc.Collect es como un último esfuerzo para liberar recursos que no mal dispuesto, WaitForPendingFinalizers parece un paso necesario. Sin embargo, no estoy seguro de cuál sería la mejor práctica para evitar llamar a gc.Collect en exceso en tales casos. Por cierto, me pregunto si ¿Hay alguna razón técnica que gc.Collect 'tiene' para promover generaciones? Parecería más útil mantener a las generaciones a menos que se hayan asignado suficientes elementos para justificar su avance. – supercat
_Nota para principiantes en C# _ (como yo): GC force call no garantiza, algún objeto concreto no utilizado se eliminará de la memoria. (Una forma de hacerlo es mediante el uso de "using statement" (https://msdn.microsoft.com/ru-ru/library/yh598w02(v=vs.80).aspx)) – user1234567
No desea obligar al recolector de elementos no utilizados a ejecutarse.
Sin embargo, si alguna vez lo hizo (como un ejercicio puramente académico, por supuesto):
GC.Collect()
Prefiero la respuesta de @Karthik, allí pueden ser situaciones en las que una aplicación debería llamar legítimamente GC.Collect(). Muy raramente sin embargo. –
Digamos que tiene una serie de referencias débiles y quería comprobar si existía alguna referencia 'en vivo'. Tendría sentido llamar a GC.Collect() antes de verificar. Solo digo. –
Creo que .Net Framework hace esto de forma automática, pero por las dudas. En primer lugar, asegúrese de seleccionar lo que desea borrar, y luego llamar al recolector de basura:
randomClass object1 = new randomClass
...
...
// Give a null value to the code you want to delete
object1 = null;
// Then call the garbage collector to erase what you gave the null value
GC.Collect();
Creo que eso es todo .. Espero que ayudar a alguien.
GC.Collect();
llamamos al recolector de basura por el método de recolección de recolector de basura. en su mayoría no hay necesidad de llamar al recolector de basura porque se ejecuta continuamente en proceso en segundo plano por un hilo separado
- 1. Recolector de basura Node.js
- 2. VBA Recolector de basura Detalles
- 3. ¿El recolector de basura llama a Dispose()?
- 4. JRuby - ¿Cómo iniciar el recolector de basura?
- 5. ¿Cómo forzar a las animaciones de jQuery a ejecutarse simultáneamente?
- 6. Detectando si se invocó al recolector de basura (.Net)
- 7. diferencia entre destructor y recolector de basura
- 8. Python: Comportamiento del recolector de basura
- 9. Referencias circulares en Javascript/Recolector de basura
- 10. Recolector de basura y clase estática, variable
- 11. ¿El recolector de basura despeja objetos suscritos a eventos?
- 12. Eficiencia del recolector de basura .NET
- 13. ¿Hay una JVM que carece de recolector de basura?
- 14. ¿Cómo funciona el recolector de basura con las pruebas unitarias?
- 15. Recolector de basura CMS: ¿cuándo funciona?
- 16. v8 | iniciar manualmente el recolector de basura
- 17. cómo implementar un recolector de basura en C++
- 18. ¿Cómo detengo el recolector de basura de Android? ¿Es posible?
- 19. ¿Cómo puedo ver qué recolector de basura java está usando
- 20. Explicación del recolector de basura de Azul "pauseless"
- 21. Implementación de barrera de memoria para un recolector de basura
- 22. ¿Objective-C tiene un recolector de basura en el iPhone?
- 23. ¿Cuánto tiempo está usando el recolector de basura?
- 24. ¿iPhone OS 3.0 tiene un recolector de basura real?
- 25. Ajuste del recolector de basura en Ruby 1.9
- 26. ¿Qué objetos no limpia el recolector de basura?
- 27. encuentre qué tipo de recolector de basura se está ejecutando
- 28. Costo de un recolector de basura en movimiento
- 29. ¿Cuándo se ejecuta el recolector de basura .net?
- 30. Python: sentencia exec y el comportamiento recolector de basura inesperada
Esta pregunta tiene buena información sobre por qué no debes hacer eso: http://stackoverflow.com/questions/118633/ qué-tan-mal-acerca-de-usar-gc-collect –
por qué está diciendo así –
La parte de cómo es mucho menos importante que la pregunta de por qué (no) para llamarlo. –