Tôi có một ứng dụng WindowsForms xuất hiện để rò rỉ bộ nhớ, vì vậy tôi đã sử dụng bộ nhớ ANTS của Redgate để xem các đối tượng mà tôi nghi ngờ và thấy rằng chúng chỉ được giữ bởi các đối tượng đã có trên Finalizer Queue. Tuyệt vời, chính xác hàng đợi của Finalizer là gì? Bạn có thể chỉ cho tôi định nghĩa tốt nhất không? Bạn có thể chia sẻ bất kỳ lời khuyên giai thoại nào không?Hàng đợi cuối cùng và Kiểm soát + ThreadMethodEntry là gì?
Ngoài ra, tất cả đối tượng GC gốc trên Hàng đợi cuối cùng là các trường hợp của System.Windows.Forms.Control + ThreadMethodEntry đối tượng có tên là "người gọi". Tôi thấy rằng nó có liên quan đến tương tác giao diện người dùng đa luồng, nhưng tôi không biết nhiều hơn thế. Hãy tha thứ cho sự lười biếng rõ ràng của tôi và thừa nhận sự thiếu hiểu biết, nhưng những nguồn lực này đều được chôn cất trong một thành phần của nhà cung cấp. Tôi đang nói chuyện với nhà cung cấp về những vấn đề này, nhưng tôi cần một số hướng để giúp tôi tăng tốc về cuộc trò chuyện. Bạn có thể chỉ cho tôi định nghĩa hữu ích nhất của ThreadMethodEntry không? Bất kỳ lời khuyên giai thoại nào?
Ngoài ra, tôi có nên quan tâm đến những đối tượng này trên hàng đợi finalizer không?
Cập nhật: Điều này Red Gate article là hữu ích.
Cảm ơn câu trả lời tuyệt vời, Paul. Đó là đồ thị tham chiếu đối tượng tôi đang nói đến, nhìn vào các đối tượng mới trong ảnh chụp thứ hai, sau khi các tài nguyên cần được dọn sạch. Tất cả các đối tượng trong biểu đồ thực hiện IDisposable có một mẹo công cụ cho biết "Dispose() đã được gọi cho đối tượng này" nhưng đối tượng đã chọn không có chú giải công cụ như vậy. – flipdoubt
Lưu ý về ThreadMethodEntry: Tôi nghĩ rằng chúng được sử dụng trong bất kỳ Invoke nào đến chuỗi giao diện người dùng. Mỗi đối tượng điều khiển có một hàng đợi của chuỗi gọi lại của loại ThreadMethodEntry. Một callback dequeues một ThreadMethodEntry và chạy nó. Mỗi đối tượng ThreadMethodEntry có một loạt các trường nội bộ. Kiểm tra các trường này có thể giúp bạn tìm ra đối tượng nào của nhà cung cấp này đang gọi. Tôi không nhớ nếu bạn có thể nhận được thông tin đó từ ANTS, nhưng tôi biết bạn có thể thông qua WinDbg.dll và sos.dll (tiện ích mở rộng trình gỡ lỗi được quản lý). Nhìn vào đại diện "phương thức" và điều khiển "người gọi". –
Ngoài ra, lưu ý rằng các đối tượng ThreadMethodEntry thực hiện một finalizer, nhưng chúng không có phương thức Dispose. Khi họ hoàn thành, họ sẽ được chuyển đến hàng đợi finalizer, quá. –