我有一个c#com类被umamaged代码使用。我可以调试它,但我不知道对象何时被释放。如果已经在C++中实现了,则会调用descructur,在C#中它将被释放给GC。有什么方法可以跟踪那个时刻吗? 在此先感谢。com对象c#的跟踪版本。
回答
维护非托管资源的托管类型应实现IDisposable接口。这告诉消费者您的代码需要在对象的实例上调用Dispose()
(即在可能的情况下将它们包装在using
块中)。
IDisposable
的正确实现将释放其终结器中的本地资源,但客户端可以比确定性释放非托管资源更早地调用Dispose()
。无论哪种方式,您都可以避免泄漏,但最好尽快拨打Dispose()
。
Here is an SO question其中详述了该过程。
问题是我无法控制非托管代码。 GC没有任何必要的清理工作。我只想知道我的对象的预期寿命是多少。 – user629926 2012-04-16 18:51:15
如果你不能控制本地代码,那么我不明白这个问题。托管代码无法清除本地代码,除非本地代码定义了一个接口来执行此操作。 GC照顾你的托管包装是无关紧要的;它不只是神奇地清理本地的东西。你必须通过实现IDisposable并在本地资源上调用一些函数来释放它。 – 2012-04-16 18:59:58
我没有任何本机资源进行清理,只是想知道什么时候管理整理器实现。 – user629926 2012-04-16 19:08:01
- 1. 如何跟踪COM对象异常?
- 2. “跟踪”版本的readlink(1)
- 3. 有没有对象更改跟踪/版本控制的Java API?
- 4. 跟踪firstResponder对象
- 5. 获取COM对象的版本
- 6. COM C#内存泄漏跟踪
- 7. _CrtSetBreakAlloc跟踪COM对象中的内存泄漏
- 8. 版本跟踪与mysql
- 9. Git会跟踪版本吗?
- 10. OpenCV C++简单对象跟踪
- 11. C#摄像头对象跟踪
- 12. 跟踪深度的对象
- 13. 版本控制Windows COM对象
- 14. 在应用程序中跟踪COM对象错误
- 15. 对象检测/跟踪
- 16. Hibernate会话跟踪对象
- 17. 数据库对象跟踪
- 18. 跟踪视频对象
- 19. 跟踪对象和引用
- 20. 跟踪assinged对象分配
- 21. 通过OpenCV跟踪对象
- 22. 从.Net访问C++ com对象(版本信息)
- 23. 的OpenCV和Python:对象跟踪和保存对象被跟踪为图像
- 24. C++ COM对象Hotpatching?
- 25. COM对象C++/cli
- 26. Com。 C#创建类型的COM对象
- 27. COM对象C的问题#
- 28. Pivotal跟踪器API集成版本
- 29. 在MongoDB中跟踪数据版本
- 30. 网络API跟踪,库版本
您是否正在寻找终结器? – SLaks 2012-04-16 18:43:09
只是好奇,你可以在这种情况下使用C#[析构函数](http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx)? – 2012-04-16 18:44:03
这里没有快乐的答案。你的[ComVisible]类实例是一个普通的旧.NET对象。它通过CCW的参考文献保存下来。最后的Release()调用破坏了CCW,但是.NET对象没有任何反应。直到它像正常收集垃圾。您需要调试本机代码。无论如何,这个问题无疑是无疑的。 – 2012-04-16 19:58:24