2009-12-08 12 views
21

Está bastante bien documentado que cuando se ejecuta el recolector de basura automático de .NET, se detendrá temporalmente todos los subprocesos administrados en ejecución asociados con el dominio de la aplicación. Lo que no he podido descubrir son detalles sobre lo que ocurre con los hilos nativos creados por la aplicación cuando se produce la recolección de basura (es decir, usando _beginthreadex() en lugar de System.Threading.Thread()). ¿Están pausados ​​de manera similar o están en la izquierda?.NET Recolección de basura e hilos nativos

+1

Apoyos en la gran pregunta. (props ++) –

+0

Consulte también [aquí] (http://stackoverflow.com/questions/8404245/gc-behavior-and-clr-thread-hijacking) y [aquí] (https://msdn.microsoft.com/en -us/library/678ysw69.aspx). – Nicholas

Respuesta

20

¿this ayuda?

"Un GC no se detendrá hilos que no son la ejecución de código administrado. Dado que esas hilos no pueden estar tocando montón de la GC de todos modos, no hay necesidad de que el GC para coordinar con ellos."

"Si un hilo fue en código administrado, pero llamada a código nativo, se continúe funcionando. Se detendrá si vuelve de nuevo a código administrado."

+0

+1 Bonito enlace. Cosas muy interesantes Espero que no te importe, edité tu publicación para incluir el bit relevante del blog en caso de que se desconecte. –

+2

Eso es interesante. ¿Por qué no pueden esos hilos tocar el montón de GC? ¿Qué pasa con 'gcroot ' y amigos? –

+0

Tan pronto como un subproceso nativo usa código administrado, se registra con el recolector de elementos no utilizados. Entonces cuando el GC se ejecuta, el hilo se suspende. Solo cuando el hilo muere se desregistra. –

Cuestiones relacionadas