¿Es posible que un programador inicie/detenga programáticamente la recolección de basura en el lenguaje de programación C#? Por ejemplo, para optimizar el rendimiento, etc.¿Es posible detener la recolección de basura .NET?
Respuesta
Realmente no. Puede dar las sugerencias GC
a través de métodos como GC.AddMemoryPressure
o GC.RemoveMemoryPressure
, pero no detenerlo directamente.
Además, la recolección de basura no es tan intensa en un proceso. Los programadores rara vez se preocupan por eso.
Oh, ya veo ... ¿Qué tal el método SuppressFinalize()? ¿Tiene un propósito diferente? – Alex
SuprimirFinalizar funciona en objetos individuales. Definitivamente no en todo el GC. Desde MSDN: los objetos que implementan la interfaz IDisposable pueden llamar a este método desde el método IDisposable.Dispose para evitar que el recolector de basura invoque Object.Finalize en un objeto que no lo requiera. (Así que, básicamente, es una mejora de rendimiento muy leve.) –
No veo cómo esto sería agregar una sugerencia para * prevenir * recolección de basura, per-se; si llama a 'GC.AddMemoryPressure', es más que probable que el CLR genere * más * recolecciones de basura, ya que indica que la memoria disponible para el CLR para el proceso (virtual o de otro tipo) es menor de lo que cree. Uno * podría * llamar a 'GC.RemoveMemoryPressure' sin una llamada correspondiente a' GC.AddMemoryPressure', en un intento de engañar al CLR para que piense que tiene más memoria que la que tiene, pero uno pensaría que el API es resistente (uno lo haría esperanza) a tales cosas. – casperOne
No, no lo hay. En el mejor de los casos, puede desencadenar la recolección de basura usted mismo, aunque esto se considera una cosa muy mala ya que puede interferir con los algoritmos de programación incorporados utilizados por el GC.
No se puede activar la recolección , solo puedo "sugerir" a. GC decidirá por sí mismo –
En general, no. Y la mayoría de la gente consideraría una optimización prematura preocuparse por la recolección de basura a menos que haga algún perfil y descubra que realmente es la causa del bajo rendimiento en su aplicación.
Si le interesan los detalles de ajustar el GC para el rendimiento (o más bien, ajustar su aplicación para mejorar su rendimiento en relación con el GC), MSDN tiene una descripción bastante decente de cómo hacerlo.
Mientras tanto es posible, hay métodos en el GC
class:
GC.TryStartNoGCRegion(...)
y GC.EndNoGCRegion()
.
- 1. Cómo depurar la Recolección de basura .net?
- 2. .NET Recolección de basura e hilos nativos
- 3. Recolección de basura en .NET (generaciones)
- 4. Recolección de basura en .NET 4.0
- 5. Retraso de recolección de basura?
- 6. Criterios para desencadenar la recolección de basura en .Net
- 7. Recolección de basura
- 8. y recolección de basura
- 9. ¿La recolección de basura es automática en C++ estándar?
- 10. Supresión de la recolección de basura C#
- 11. Uso de la recolección de basura?
- 12. ¿Es posible obtener OutOfMemoryError porque la recolección de basura es demasiado lenta?
- 13. ¿Deberíamos utilizar la recolección de basura "estación de trabajo" o la recolección de basura "servidor"?
- 14. ¿NewLISP usa la recolección de basura?
- 15. ¿Notificación de recolección de basura?
- 16. recolección de basura de java
- 17. ¿Qué es la recolección de basura de JavaScript?
- 18. Activación de una recolección de basura .NET externamente
- 19. JVM sin recolección de basura
- 20. multiprocesamiento y recolección de basura
- 21. referencia interna impide la recolección de basura
- 22. ¿WinRT tiene recolección de basura?
- 23. Recolección de basura en Delphi
- 24. Forzar recolección de basura en AS3?
- 25. Patrones inusuales de recolección de basura
- 26. ¿Diferencia entre el fondo y la recolección de basura concurrente?
- 27. ¿Qué desencadena una recolección de basura gen2?
- 28. ¿La recolección de basura alguna vez afecta la pila?
- 29. Node.js y V8 de recolección de basura
- 30. ¿Cómo mejorar el rendimiento de la recolección de basura?
La recolección de elementos no utilizados no forma parte del lenguaje de programación C#. Es parte de .NET CLR. –
"Un poco". Si nunca asigna nada, el GC nunca se acumulará. Asigne previamente todo lo que necesita y luego llame a 'GC.Collect()'. –
Quizás también eche un vistazo a esta respuesta: http://stackoverflow.com/questions/6005865/prevent-net-garbage-collection-for-short-period-of-time/6005949#6005949 – Gamlor