Tengo una clase c com que usa el código de umamaged. Puedo depurarlo, pero no puedo saber cuándo se lanza un objeto. Si se hubiera implementado en C++, se llamaría descructur, en C# se liberaría a GC. ¿Hay alguna manera de rastrear ese momento? Gracias de antemano.Liberación de pista del objeto com C#.
Respuesta
Los tipos gestionados que mantienen recursos no administrados deben implementar la interfaz IDisposable. Esto le informa a los consumidores de su código que necesitan llamar al Dispose()
en instancias de su (s) objeto (s) cuando terminan con ellos (es decir, envuélvalos en un bloque using
cuando sea posible).
Una implementación adecuada de IDisposable
lanzará los recursos nativos en su finalizador, pero los clientes pueden llamar al Dispose()
antes que para la liberación determinística de recursos no administrados. De cualquier forma, evita una fuga, pero es mejor llamar al Dispose()
lo más rápido posible.
Here is an SO question que detalla el proceso.
El problema es que no puedo controlar el código no administrado. No hay ninguna limpieza necesaria que GC no pueda realizar. Solo deseo saber qué duración se espera de mi objeto. – user629926
Si no tienes control sobre el código nativo, entonces no entiendo la pregunta. El código administrado no tiene forma de limpiar el código nativo a menos que el código nativo defina una interfaz para hacerlo. El GC que se ocupa de su contenedor administrado es irrelevante; no solo limpia mágicamente las cosas nativas. Tienes que hacerlo tú mismo implementando IDisposable y llamando a alguna función en tus recursos nativos para liberarlo. –
No tengo ningún recurso nativo para la limpieza, solo quiero saber cuándo se realiza Warper administrado. – user629926
- 1. Liberación de "propiedad" del objeto COM en .NET
- 2. Liberación de objetos COM
- 3. Liberación de objetos COM temporales
- 4. C# Obtener progID del objeto COM
- 5. pista si el objeto cambió
- 6. ¿Cómo se enumeran los miembros del objeto COM en C#?
- 7. ¿Está permitido [control de liberación] controlar la duración del objeto?
- 8. Objective C "liberación automática" en C++: ¿forma estándar de controlar la duración del objeto?
- 9. llamando al objeto .NET COM de VBScript
- 10. Cómo probar un objeto dependiente de COM en C#
- 11. Convirtiendo la interfaz de objeto COM de C a Delphi
- 12. No se puede convertir objeto COM del tipo de excepción
- 13. Registro de un objeto COM creado con VS C# 2010
- 14. autofac en la liberación v2.4.5.724
- 15. No se puede convertir objeto COM - Microsoft Outlook & C#
- 16. Cómo obtener el tipo de objeto COM
- 17. Crear objeto COM desde archivo sin regsvr32
- 18. C - win32: AttachThreadInput & SetFocus, 64bit: ninguna pista
- 19. Three.js - memoria de liberación
- 20. C# picturebox liberación de memoria problema
- 21. Manejar eventos C# COM en C++
- 22. Forma manual de invocar objeto COM a través de .NET
- 23. TFS2010 - Pista Merges
- 24. ¿Cuándo se lanza un objeto con 'liberación automática'?
- 25. ¿Puedo liberar anticipadamente un objeto de liberación automática?
- 26. Release COM Object en C#
- 27. Explore un objeto COM en PHP
- 28. ¿Estoy llamando a un objeto .NET o un objeto COM?
- 29. Registre un objeto COM utilizando InstallShield
- 30. Gestión de memoria Objective-C (asignación y liberación automática)
¿Está buscando un finalizador? – SLaks
Simplemente curioso, ¿puedes usar un C# [destructor] (http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx) en esta situación? –
No hay una respuesta feliz aquí. Su instancia de clase [ComVisible] es un simple objeto .NET antiguo. Se mantiene vivo por una referencia en la CCW. La llamada a Release() final destruye la CCW, pero no ocurre nada con su objeto .NET. Hasta que se recoja basura como es normal. Deberá depurar el código nativo. Donde el problema sin duda se encuentra de todos modos. –