Tôi có một lớp C# com được sử dụng bởi mã không bị nhiễu. Tôi có thể gỡ lỗi nó, nhưng tôi không thể biết khi nào một đối tượng được phát hành. Nếu nó đã được implementd trong c + + descructur sẽ được gọi, trên C# nó sẽ được phát hành để GC. Có cách nào để theo dõi khoảnh khắc đó không? Cảm ơn trước.Theo dõi bản phát hành của đối tượng com C#.
Trả lời
Loại được quản lý duy trì tài nguyên không được quản lý nên triển khai giao diện IDisposable. Điều này cho người tiêu dùng biết mã của bạn rằng họ cần phải gọi Dispose()
về các trường hợp của (các) đối tượng của bạn khi họ kết nối với họ (tức là, bọc chúng trong một khối using
khi có thể).
Thực hiện đúng cách IDisposable
sẽ phát hành tài nguyên gốc trong trình hoàn thiện của họ, nhưng khách hàng có thể gọi số Dispose()
sớm hơn để phát hành xác định tài nguyên không được quản lý. Dù bằng cách nào bạn tránh bị rò rỉ, nhưng tốt hơn bạn nên gọi số Dispose()
càng nhanh càng tốt.
Here is an SO question chi tiết quy trình.
Vấn đề là tôi không thể kiểm soát mã không được quản lý. Có arent bất kỳ dọn dẹp cần thiết mà không thể được thực hiện bởi GC. Tôi chỉ muốn biết tuổi thọ của đối tượng là gì. – user629926
Nếu bạn không kiểm soát được mã gốc thì tôi không hiểu câu hỏi. Mã được quản lý không có cách nào để dọn sạch mã gốc trừ khi mã gốc định nghĩa một giao diện để làm như vậy. GC chăm sóc của wrapper quản lý của bạn là không thích hợp; nó không chỉ dọn dẹp một cách kỳ diệu những thứ tự nhiên. Bạn phải làm điều đó cho mình bằng cách thực hiện IDisposable và gọi một số chức năng trên nguồn gốc của bạn để giải phóng nó. –
Tôi không có bất kỳ tài nguyên gốc để dọn dẹp, chỉ muốn biết khi nào warper được quản lý nhận ra. – user629926
- 1. Phát hành đối tượng COM trong C#
- 2. Phát hành các đối tượng COM
- 3. Phát hành "quyền sở hữu" đối tượng COM trong .NET
- 4. C# + COM Interop, xác định phát hành
- 5. C# Theo dõi đối tượng máy ảnh
- 6. Vượt qua mảng C# của đối tượng COM vào VB6
- 7. Theo dõi/theo dõi của HABTM theo dõi/theo dõi
- 8. Cách phát hành đối tượng COM Server inprocess từ Excel VBA
- 9. Hành vi của đối tượng C++ Reference
- 10. Đối tượng COM Azure
- 11. Cách kiểm tra đối tượng phụ thuộc COM trong C#
- 12. System.Runtime.Caching không phát hành BitmapImage đối tượng
- 13. Visual Studio 2010 64-bit COM Interop Số phát hành
- 14. theo dõi đối tượng màu trong openCV giúp phát hiện da
- 15. Cách theo dõi thay đổi đối tượng kinh doanh?
- 16. theo dõi Bug thực hành tốt nhất
- 17. Khi nào phát hành đối tượng NSUrlConnection
- 18. Android: Theo dõi số đối tượng được tạo
- 19. opencv - theo dõi đối tượng bằng cách sử dụng tính năng phát hiện
- 20. Theo dõi đối tượng: MATLAB so với Python Numpy
- 21. Khả năng tương thích .NET và COM: phát hành COM từ máy khách .NET
- 22. Bản sao sâu của đối tượng C#
- 23. Đối tượng COM đã được tách khỏi RCW cơ bản của nó không thể được sử dụng
- 24. có thực hiện xóa bỏ các bản phát hành các đối tượng của scrollview không?
- 25. Theo dõi git-flow bạn nên xử lý hotfix của bản phát hành trước đó như thế nào?
- 26. Khởi tạo đối tượng COM cũ trong C# động (sử dụng ID của nó trong chuỗi)
- 27. Đối tượng Com trong Java, có thể?
- 28. Khám phá đối tượng COM trong PHP
- 29. Theo dõi tất cả các tham chiếu đối tượng trong C#
- 30. Git có theo dõi Phiên bản không?
Bạn đang tìm kiếm trình hoàn thiện? – SLaks
Chỉ cần tò mò, bạn có thể sử dụng một C# [destructor] (http://msdn.microsoft.com/en-us/library/66x5fx1b.aspx) trong tình huống này? –
Không có câu trả lời hạnh phúc ở đây. Cá thể lớp [ComVisible] của bạn là một đối tượng .NET cũ đơn giản. Nó được giữ sống bằng một tham chiếu trong CCW. Lệnh Release() cuối cùng hủy hoại CCW nhưng không có gì xảy ra với đối tượng .NET của bạn. Cho đến khi nó được thu gom rác như bình thường. Bạn sẽ cần gỡ lỗi mã gốc. Trường hợp vấn đề không có nghi ngờ là nằm anyway. –