我有一個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. C++:跟蹤所有現有的對象
- 5. 跟蹤firstResponder對象
- 6. COM對象和不同版本的DLL
- 7. 獲取COM對象的版本
- 8. COM C#內存泄漏跟蹤
- 9. _CrtSetBreakAlloc跟蹤COM對象中的內存泄漏
- 10. Git會跟蹤版本嗎?
- 11. 跟蹤頁面版本
- 12. 版本跟蹤與mysql
- 13. 版本/跟蹤實體
- 14. 跟蹤對象在C中訪問
- 15. C#攝像頭對象跟蹤
- 16. OpenCV C++簡單對象跟蹤
- 17. 跟蹤深度的對象
- 18. OpenCV中的對象跟蹤
- 19. 版本控制Windows COM對象
- 20. 在應用程序中跟蹤COM對象錯誤
- 21. 通過OpenCV跟蹤對象
- 22. 保持跟蹤MKAnnotationView對象
- 23. 跟蹤對象和引用
- 24. Hibernate會話跟蹤對象
- 25. THREE.js跟蹤模型(對象)
- 26. 數據庫對象跟蹤
- 27. 使用javaCV跟蹤對象
- 28. 跟蹤視頻對象
- 29. 跟蹤assinged對象分配
- 30. 對象檢測/跟蹤
您是否正在尋找終結器? – 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