¿Se ejecuta la recolección de elementos no utilizados durante la depuración?

Tengo un progtwig que abre un objeto COM de Excel, hace algunas cosas y lo cierra. Luego quiero mover ese archivo después de que esté cerrado. Esto funciona bien si ejecuto el progtwig sin puntos de interrupción. Pero, si entro en algo en modo de depuración antes de intentar mover el archivo, obtengo una IOException: “El proceso no puede acceder al archivo porque lo está usando otro proceso”.

Entonces, ¿cuál es el problema? ¿La recolección de basura funciona mejor mientras que un progtwig puede ejecutarse a toda velocidad en lugar de hacerlo mientras lo paso? ¿Está pasando por mi código haciendo algo más que ejecutarlo muy lentamente? ¿Hay otras consecuencias para el modo de depuración? ¿Otros errores que se encuentran simplemente porque estoy en depuración y no ejecutando un exe?

La recolección de basura se optimiza de forma diferente cuando no se ejecuta en el depurador, sí. En particular, el CLR puede detectar que una variable no se utilizará para el rest de un método, y no la trata como una raíz de GC. En el depurador, las variables en el scope actúan como raíces de GC en todo el método, por lo que aún puede examinar los valores con el depurador.

Sin embargo, eso rara vez debería ser un problema: solo debería afectar las cosas si un finalizador realiza realmente una limpieza, y si está ordenando cosas de manera explícita (por ejemplo, con declaraciones de using ), generalmente no notaría la diferencia.